Material för betyg 4-5 Föreläsning nr 5, fredag 27 mars. kl

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Programmeringsteknik Föreläsning 6 Skolan för Datavetenskap och kommunikation.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Repetition inför provet
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
ObjektOrienterad analys och design. SVP Vt2009 Föreläsning nr 2, måndag 8 april kl Diskussion (kurshemsida): Om designuppgiften Om projektuppgiften.
Metoder i java Det finns två typer av metoder i java
Arv.
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Strömmar Vid läsning och skrivning används något som kallas strömmar.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
i olika programmeringsspråk
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Sid 41 Fordon int antalhjul; int vikt;
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 14 ”Enkel” Filhantering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
Programmering i C# Laborationer.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
Presentationens avskrift:

Material för betyg 4-5 Föreläsning nr 5, fredag 27 mars. kl. 13-15. Snabböversikt över: Ärvning, inheritance, bokens kapitel 8-9 (plus bl.a. Filter i projektet imageviewer, kapitel 11) Hantering av "undantag", exceptions. bokens kapitel 12. Frågor ?

Ärvning, inheritance. Projektet imageviewer i kapitel 11: Klassen Filter är märkt abstract och om vi går in med editorn och tittar i koden för dess klassen hittar vi abstract igen: public abstract void apply(OFImage image); Reserverade ordet abstract betyder att klassen Filter inte själv kan skapa objekt. De heldragna pilarna från DarkerFilter etc. till Filter anger att dessa är subklasser till Filter.

Ärvning, inheritance. Projektet imageviewer i kapitel 11: Hur samverkar då subklasserna DarkerFilter, LighterFilter, FishEyeFilter och ThresholdFilter med sin superklass Filter? I klassen ImageViewer anropas konstruktorn i DarkerFilter enligt: new DarkerFilter("Darker"), där aktuella parametervärdet "Darker", senare dyker upp som ett menyalternativ i Filter-menyn. Konstruktorn i DarkerFilter: public DarkerFilter(String name) { // super ( parameter ) betyder just anrop till super(name); // superklassens konstruktor med angiven } // parameter tar bara emot inparametern "Darker", och skickar den vidare som parameter till konstruktorn i superklassen: public abstract class Filter { private String name; // aktuella parametern name vid anropet till public Filter(String name) // konstruktorn i subklassen blir ett värde på { // superklassens strängobjektet name i det this.name = name; // objekt som sub- och superklasserna hjälps } // åt att skapa. Notera att namnet name här (olyckligtvis) används i två betydelser: name lokalt inom konstruktorn och name i klassen Filter för övrigt. Reserverade ordet this i konstruktorkoden kan tolkas som "det objekt som nu skapas".

Ärvning, inheritance. Projektet imageviewer i kapitel 11: Hur samverkar då subklasserna DarkerFilter, LighterFilter, FishEyeFilter och ThresholdFilter med sin superklass Filter? (forts) Anropet till konstruktorn i DarkerFilter leder till att det skapas ett DarkerFilter-objekt, som dels kan utföra metoderna i klassen DarkerFilter, (där finns förutom konstruktorn bara metoden: public void apply(OFImage image) ), dels metoderna i superklassen Filter , (där finns förutom konstruktorn bara metoden: public String getName( ) ) Detta är dock precis det som behövs för att ImageViewer skall kunna använda DarkerFilter (och de andra subklasserna på samma sätt). När man lägger till en ny filtertyp, dvs en ny subklass t ex MirrorFilter, behöver man i ImageViewer bara lägga till en enda rad, ett anrop till den nya subklassens konstruktor och lägga in det returnerade objektet i ett List-objekt filterList: filterList.add ( new MirrorFilter (”Mirror") );

Ärvning, inheritance. Projektet imageviewer i kapitel 11: Koden som i superklassen Filter som lägger in nya filtertypen i Filter-menyn är (filters är samma objekt som filterList i förra bilden): for (final Filter filter : filters) { item = new JMenuItem ( filter.getName( ) ); item.addActionListener ( new ActionListener( ) { public void actionPerformed ( ActionEvent e ) { applyFilter ( filter ); } }); menu.add(item); Texten som dyker upp i menyalternativet kommer från: filter.getName( ) dvs ”Mirror” i exemplet i förra bilden, det som händer vid detta val är att metodanropet applyFilter(filter) utförs, och filter är då en refererens till det MirrorFilter-objekt som skapades och lades in i listan, och i applyFilter anropas just detta MirrorFilter-objekts metod apply(currentImage) där currentImage är en referens till det OFImage-objekt, som skall filtreras.

Ärvningsexemplet ImageViewer, kommentarer: Bokens exempel är ofta konstruerade för att tydligt belysa olika saker, i det här fallet vad det reserverade ordet abstract innebär, och hur abstrakta klasser används. Här behöver varje filterobjekt ha en egen metod public void apply(OFImage image) för att kunna utföra just sin filtrering. Superklassen Filter har ingen egen "defaultmetod" utan apply-metoden finns endast i de olika subklasserna, där den måste finnas. Detta anges i Filter genom nyckelordet abstract för både klassen och metoden apply. Det måste finnas subklasser som kompletterar, extends Filter, med denna metod apply. Man kan ha ärvning, extends, utan att superklassen är abstract. Detta hade varit fallet om Filter haft en egen "defaultmetod" apply. Man kan dock inte ha abstrakta klasser utan att ha ärvning. Eftersom enda skillnaden mellan de olika filterklasserna är, att de har olika sätt att utföra metoden apply, kunde man (nästan?) lika gärna ha lagt in alla dessa som skilda metoder i klassen Filter. Uppdateringen av klassen ImageViewer med nya menyalternativ, när man lägger till en ny filertertyp gjordes ju ändå för sig och manuellt. En alternativ implementation, utan ärvning och med automatisk uppdatering av menyalternativen, finns i projektet AltImageViewer, men där får man ju inte tillfälle att diskutera abstrakta klasser och metoder alls.

Flera ärvningsexempel: Från standardbibliotek En mycket vanlig och användbar tillämpning av ärvning är, att man vill att en klass, förutom sin egen funktionalitet, skall kunna utföra en mängd funktioner/tjänster som finns i javas bibliotek. I t.ex. en interaktiv tillämpning, där användaren skall administrera sitt adressregister, vill man kunna lägga till nya kontakter, ändra uppgifter om eller helt ta bort befintliga, göra sökningar och listningar mm. Alt detta vill man göra som en interaktiv fönsterapplikation. Ett bekvämt sätt att börja är då: import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.util.*; public class AdressRegister extends JFrame { // osv Ett AdressRegister-objekt kan då automatisk utföra allt det som ett JFrame-objekt kan, och dessutom allt det man lagt in i klassen AdressRegister.

public void makeVisible ( ) ; Flera ärvningsexempel: Begreppshierarkier Det allra första exemplet i kursboken handlade om cirklar, trianglar och rektanglar. I klasserna Circle, Square och Triangle fanns väldigt mycket som var gemensamt, nämligen variablerna: int xPosition; int yPosition; String color; boolean isVisible; och metoderna: public void makeVisible ( ) ; public void makeInvisible ( ) ; public void moveRight ( ) ; public void moveLeft ( ) ; public void moveUp ( ) ; public void moveDown ( ) ; public void moveHorizontal(int distance) public void moveVertical(int distance) public void slowMoveHorizontal(int distance) public void slowMoveVertical(int distance) public void changeColor(String newColor) private void erase ( ) ;

Flera ärvningsexempel: Begreppshierarkier forts Det som skiljer när det gäller variabler (fields) är att cirkelobjekt har diameter, kvadrater size (=sida) och trianglar width och height, och när det gäller metoder att rita dem med: public void draw( ); // olika biblioteksfunktioner används och anger storlek: public void changeSize(int newDiameter); // circle, one parameter public void changeSize(int newSize); // square, one parameter public void changeSize(int newHeight, int newWidth); // triangle, two parameters Genom att lägga det gemensamma i en superklass Shape kan man minska den totala kodmängden och framför allt göra den lättare att underhålla. Lite extra trixande krävs för att hantera det olika antalet parametrar till changeSize. Se projektet shapesPlus.

Flera ärvningsexempel: Begreppshierarkier forts 2 Ett projekt i tre versioner, dome-v1, dome-v2 och dome-v3 i kapitel 8-9, illustrerar hur man i det fallet på liknande sätt kan undvika att samma kod finns på flera ställen. Mitt intryck är nog att ärvningshierarkierna förekommer mer frekvent i kursböcker om objektorienterad program-mering än de gör i praktiska industriella tillämpningar. I anslutning till dome-projekten illustreras också dynamisk bindning och skillnaden mellan static eller declared type, och dynamic eller run-time type.

Om hantering av "undantag", exceptions, i java, kursbokens kap. 12: När man designar ett datorprogram utgår man normalt från en normal och fungerande driftmiljö. Det är i denna programmet främst skall fungera. I nästa steg kompletterar man med att ta hänsyn till ett antal förutsägbara felsituationer: användaren kan mata in felaktiga data, klicka på menyer och knappar i felaktig ordning, nätverksförbindelsen kan försvinna, den sökta filen eller nätverksadressen finns inte, resultatet av en operation kan ge ett resultat som inte kan hanteras, etc. Normalt vill man inte att programmet skall spåra ur eller haka upp sig, när denna typ av händelser inträffar. Skall programmet vara robust och kunna hantera sådana felsituationer eller ”undantag”, exceptions, kan koden för detta ofta bli mycket mer omfattande, än koden för den ”normala” funktionen. Man vill dock gärna behålla en överskådlig struktur för ”normalkoden” och på något sätt separera den från ”felhanteringskoden”. Java har (naturligtvis) en objektorienterad modell för felhanteringen. Metaforen är att en felhändelse genererar ett exception-objekt, som kastas, throw, iväg från den plats i koden, där händelsen inträffar. Exception-objektet ”fångas”, catch, någonstans, och där bestäms vilken åtgärd som är lämplig. Man återvänder sedan inte automatiskt till platsen, där felhändelsen inträffade.

Om hantering av "undantag", exceptions, i java, kursbokens kap Om hantering av "undantag", exceptions, i java, kursbokens kap. 12, forts: Vissa exceptions är det programmerarens skyldighet att vara beredd på; man skall veta att de kan inträffa vid vissa operationer. Andra exceptions är sådana att de kan inträffa nästan var som helst. Ett av de vanligaste av dessa är NullPointerException, som genereras om man ber ett objekt som (ännu) inte finns att utföra en metod. För de exceptions man kan förutse, gäller detta ofta ett visst kodavsnitt. Om jag skriver ett program, som skall läsa in en fil bör jag vara beredd t.ex. på att filen inte finns. Jag lägger då filopera-tionerna i ett try-block, och engagerar en eller flera catch-funktioner, som håller ett vakande öga (readFromFile är pseudokod): String textrad =””; try { while(true) { textrad = readFromFile(”minFil.txt”); System.out.println(textrad); } catch (FileNotFoundException ex1) { System.out.println( ”Felmeddelande: ”+ex1); } catch ( EOFException ex2) { ; // slut på fil: färdigläst – bara att gå vidare} … kodfortsättning efter ovanstående Om det i try-blocket ”kastas” ett FileNotFoundException avbryts direkt try-satserna och det som finns tillhörande catch-block (det första) utförs. Därefter ”kodfortsättningen. Inträffar EOFException avslutas också try-satserna och man går direkt till ”kodfortsättningen, eftersom koden i catch-block 2 är tom. Skulle något annat exception kastas, flyger det vidare och får fångas av omgivande block eller kasta vidare ända ut till java-interpretatorn, som då avbryter programmet.

Om hantering av "undantag", exceptions, i java, kursbokens kap Om hantering av "undantag", exceptions, i java, kursbokens kap. 12, forts 2: Normalt är de exceptions, som redan finns i biblioteken, fullt tillräckliga. Det finns dock möjlighet att definiera egna Exception-klasser, som då är subklasser till superklassen Exception. Ett catch-block: catch (Exception e) { pseudokod: hantering;} fångar alla typer av exceptions, dvs ”kastade” objekt från klassen Exception och alla dess subklasser. Vill man definiera en egen exception-klass är mekanismen för att kasta sådana exception-objekt: if ( filnamn.equals(bittorrent.exe) ) throw new AlertAntiPiratException ( ”misstänkt fildelare”); … kodfortsättning efter ovanstående Om en metod exempel innehåller operationer som explicit kan leda till exceptions, säg IOException som inte ”catchas” måste detta anges med throws som i: public void exempel() throws IOException { … metodens kod } Detta kan sedan ”kastas” vidare från metoder som anropar denna metod etc. Nyckelord i samband med exceptions: throw, throws, try, catch och Exception.

Individuella projektet: Syfte och krav? Frågor och diskussion allmänt. Kursen hittills: Klasser, objekt, konstruktorer (och anrop till), parameterlistor, datatyper (primitiva och klasser), metoder (och anrop till), returvärden, returtyper, "anropskedjor", deklarationer, räckvidd/synlighet/scope, de 53 reserverade orden, Individuella projektet: Syfte och krav? Databasuppgiften: Syfte och krav? Betyg 4-5: Hur och när? (FL-6) Övrigt?