Fakultät für Wirtschaftswissenschaften Einführung in die Programmierung Klassendefinition und Objekte Uwe Lämmel www.wi.hs-wismar.de/~laemmel [email protected] Uwe Lämmel Klassendefinition und Objekte Folie 1 Inhalt Klasse – Bauplan: Zweck, Aufbau, Entwurf – ausführbare Klasse – Bibliotheksklasse Methoden – Konstruktor – Zugriff – Ausgabe – Verarbeitung Parameter Erzeugung und Nutzung von Objekten Uwe Lämmel Klassendefinition und Objekte Folie 2 Klasse repräsentiert alle Objekte eines Typs (Bauart), z.B.: "Student ", "Ticketautomat" beschreibt Objekte mittels: – Daten = Merkmale (Attribute, Instanz-Variablen) – Aktionen = Methoden Uwe Lämmel Klassendefinition und Objekte Folie 3 Ticket-Automat: Nutzersicht = externe Sicht Beispiel: Ein naiver Ticket-Automat: – liefert Tickets zum festen Preis Fragen: – Wie wird dieser Festpreis festgelegt? – Wie wird "Geld eingeworfen"? – Wie verwaltet der Automat das Geld? Uwe Lämmel Klassendefinition und Objekte Folie 4 Ticket-Automat: Programmierer= interne Sicht Klasse muss Objekte so beschreiben, dass gewünschtes Verhalten erreicht wird Merkmale? preis bisherGezahlt gesamtsumme anzVerkaufterTickets Uwe Lämmel Methoden? Konstruktor getPreis getBisherGezahlt geldEinwerfen ticketDrucken Klassendefinition und Objekte Folie 5 Merkmal (Datenfeld, Instanz-Variable) Instanz-Variablen speichern Merkmale BlueJ: "inspect" zeigt die Merkmale eines Objekts Werte der Instanz-Variablen = Zustand eines Objekts Sichtbarkeit public class TicketAutomat{ private int preis; private int bisherGezahlt; private int gesamtsumme; //hier: Konstruktoren und Methoden } //TicketAutomat Typ Name der Variable private int preis; Uwe Lämmel Klassendefinition und Objekte Folie 6 Konstruktoren … erzeugen ein Objekt … haben denselben Namen wie die Klasse … legen Anfangswerte für Merkmale fest: häufig: Anfangswert als Parameter "von außen" public TicketAutomat (int ticketPreis) { preis = ticketPreis; bisherGezahlt = 0; gesamtsumme = 0; anzTickets = 0; } // TicketAutomat Uwe Lämmel Klassendefinition und Objekte Folie 7 Daten-Übergabe mittels Parameter TicketAutomat bus = new TicketAutomat(500); Uwe Lämmel Klassendefinition und Objekte Folie 8 Zuweisung (Assignment) variable = expression; Werte in Variablen speichern: preis = ticketPreis; bisherGezahlt = 0; Variable speichert NUR EINEN Wert; vorheriger Wert verloren Uwe Lämmel Klassendefinition und Objekte Folie 9 Methoden legen das Verhalten von Objekten fest unterscheiden: – Konstruktor-Methoden – Zugriffsmethoden (lesend, schreibend) – Verarbeitungsmethoden – Ausgabe-Methoden einheitlicher Aufbau: – Kopf (Signatur) public int getPreis() – Körper { … Anweisungen … } Uwe Lämmel Klassendefinition und Objekte Folie 10 Zugriffsmethode, lesend Information über das Objekt besitzt Ergebnis-Typ und return-Anweisung return-Anweisung bestimmt Ergebnis Ergebnis-Typ Sichtbarkeit Methodenname Parameterliste public int getPreis(){ return preis; } //getPreis return-Anweisung bestimmt Ergebnis Kommentar zur schließenden Klammer Anfang und Ende des Methoden-Körpers (block) Uwe Lämmel Klassendefinition und Objekte Folie 11 Zugriffsmethode, schreibend Sichtbarkeit Verändert die Merkmale eines Objekts besitzt (meist) Parameter kein Ergebnis-Typ (void) enthält Zuweisungen an Instanz-Variable (kein) Ergebnis-Typ Methodenname Parameterliste public void setPreis(int neu){ preis = neu; Zuweisung } //setPreis Kommentar zur schließenden Klammer Anfang und Ende des Methoden-Körpers (block) Uwe Lämmel Klassendefinition und Objekte Folie 12 Ausgabemethode KEINE Verarbeitung nur Ausgabe der Objekt-Werte in gewünschter Form 2 Möglichkeiten: – direkte Ausgabe : Ergebnistyp void, Ausgabe: System.out.println(…); – toString-Methode: Ergebnistyp String und return-Anweisung public void ausgabe() { System.out.println("Preis=" + preis + " Geldsumme= "+gesamtsumme); } //ausgabe public String toString() { return "Preis=" + preis + " Geldsumme= "+gesamtsumme; } //toString Uwe Lämmel Klassendefinition und Objekte Folie 13 Klasse = Bauplan class Klasse { – Merkmale – Konstruktoren – Methoden // Merkmale = Instanz-Variablen (private) private int number; // Konstruktor(en) mit/ohne Parameter public Klasse( ) { /* Initialisierungen */ } // Zugriffsmethoden: getX/setX public int getNumber() { return number;} public void setNumber(int n) { number=n; } // Arbeitsmethoden public boolean istTeiler(int a) { … } // Ausgabe public void ausgabe() { System.out.println("Nummer= "+number); } }//Klasse Uwe Lämmel Klassendefinition und Objekte Folie 14 Klasse TicketAutomat Beispiel in BlueJ entwickeln. Klasse testen: – TicketAutomat-Objekt erzeugen – Methoden an das Objekt senden – mittels "inspect" Zustand des Objekts einsehen – Schreiben einer ausführbaren Klasse Uwe Lämmel Klassendefinition und Objekte Folie 15 Ausführbare Klasse enthält main Methode: public static void main(String[ ] args) { … } kann als Programm ausgeführt werden: class Klasse { // main-Methode: public static void main(String[ ] args) { // Verarbeitung TicketAutomat bus = new TicketAutomat(500); bus.geldEinwerfen(200); bus.ticketDrucken(); bus.ausgabe(); System.out.println(bus); }//main }//Klasse Uwe Lämmel Klassendefinition und Objekte Folie 16 Zusammenfassung Klassen bilden reale oder virtuelle Welt ab Klassen beschreiben Objekte Klasse: Merkmale, Konstruktoren, Methoden Merkmale = Instanzen-Variablen – Menge der Werte = Zustand des Objekts Konstruktor: erzeugt Objekt Zugriffsmethoden: lesend, schreiben Methoden können … – Zustand des Objekts ändern – Parameter besitzen – ein Ergebnis liefern Zuweisung Wert an Variable: Speicher Uwe Lämmel Klassendefinition und Objekte Folie 17 Aufgabe Machen Sie sich mit dem Projekt "Naiver-Ticket-Automat" vertraut. Verbessern Sie den Ticket-Automaten – Es wird ein Ticket nur gedruckt, falls genügend (ev. auch mehr) Geld eingeworfen wurde. – Eine Methode gibt das Wechselgeld heraus. – Es werden nur sinnvolle Geldbeträge in der Methode "geldEinwerfen" akzeptiert. selbst erarbeiten! Uwe Lämmel Klassendefinition und Objekte Folie 18 Digitale Uhr: Klassen und Objektinteraktion Uwe Lämmel Klassendefinition und Objekte Folie 19 Digitale Uhr: Nutzersicht = externe Sicht Ein digitale Uhrenanzeige – Zeigt Stunde und Minute Fragen: – Wie wird erkannt, dass eine Minute vorbei ist? – Wie kann die Uhr gestellt werden? Uwe Lämmel Klassendefinition und Objekte Folie 20 Digitale Uhr: Programmierer = interne Sicht Warum vierstellige Anzeige? Zwei Anzeigen zu je 2 Ziffern! Vorteil: EINE Klasse für eine zweistellige Anzeige ZWEI Objekte der Klasse für die Uhr einsetzen: – Ein Anzeige-Objekt stunden – Ein Anzeige-Objekt minuten Uwe Lämmel Klassendefinition und Objekte Folie 21 Abstraktion und Modularisierung Abstraktion – – Details ignorieren Konzentration auf Wesentliches Modularisierung – – – Uwe Lämmel Teilen der Aufgabe in kleinere Teile getrennte Lösung der Teilprobleme Interaktion der Teillösungen Klassendefinition und Objekte Folie 22 Digitale Uhr: Objekt-Interaktion Uwe Lämmel Klassendefinition und Objekte Folie 23 Nummernanzeige: Programmiersicht Klasse muss Objekte so beschreiben, dass gewünschtes Verhalten erreicht wird Hochzählen (Methode erhoehen) Wenn limit erreicht, dann auf 0 setzen Merkmale? - limit - wert Uwe Lämmel Methoden? - Konstruktor - getLimit - getWert - getAnzeigeWert - setWert - erhoehen Beispiel Zähler bis 12: Wert Anzeige 0 1 2 … 9 10 11 0 1 … 00 01 02 … 09 10 11 00 01 … Klassendefinition und Objekte Folie 24 Klasse Nummeranzeige Merkmale Konstruktor public class Nummernanzeige { private int limit; private int wert; public Nummernanzeige(int anzeigeLimit) { limit = anzeigeLimit; wert = 0; } //Konstruktor // Methoden fehlen hier. } // Nummernanzeige Uwe Lämmel Klassendefinition und Objekte Folie 25 Klasse Nummernanzeige: Methoden // Zugriffsmethoden: public int getWert() { return wert; } public String getAnzeigewert() { if(wert<10) { return "0" + wert;} else { return "" + wert; } } //gibAnzeigewert public void setWert(int ersatzwert) { if((ersatzwert >= 0) && (ersatzwert < limit)) { wert = ersatzwert; } //if } //setzeWert public void erhoehen() { wert = wert + 1; if((wert == limit) wert =0; } //erhoehen Uwe Lämmel Klassendefinition und Objekte Folie 26 Klasse Uhrenanzeige public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; // Konstruktor und // Methoden fehlen hier! } // Uhrenanzeige Uwe Lämmel Klassendefinition und Objekte Folie 27 Klasse Uhrenanzeige: Programmiersicht Klasse muss Objekte so beschreiben, dass gewünschtes Verhalten erreicht wird Anzeige der Zeit Eine Minute vorbei (Methode taktsignalGeben) Merkmale? - stunden - Minuten - zeitanzeige Uwe Lämmel Methoden? - Konstruktor - getUhrzeit - getStunden - getMinuten - setStunden - setStunden - setUhrzeit - taktsignalGeben Klassendefinition und Objekte Folie 28 Klassendiagramm Uwe Lämmel Klassendefinition und Objekte Folie 29 Uhrenanzeige: Instanzvariablen public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; private String zeitanzeige; // techn. Gründe Neu: Instanzvariablen können Objekte sein Instanzvariable stunden ist Objekt der Klasse Nummernanzeige Uwe Lämmel Klassendefinition und Objekte Folie 30 Uhrenanzeige: Konstruktor ZWEI Objekte der Klasse Nummernanzeige bilden eine Uhr Sind Instanzvariablen Objekte, dann müssen diese im Konstruktor erzeugt werden: Stunden = new Nummeranzeige(24); // Konstruktor public Uhrenanzeige (){ stunden = new Nummernanzeige(24); minuten = new Nummernanzeige(60); anzeigeAktualisieren(); } // Konstruktor Uwe Lämmel Klassendefinition und Objekte Folie 31 Klasse Uhrenanzeige: Methoden public String getUhrzeit(){ return zeitanzeige; } Setzen einer Uhrzeit = Setzen der Werte in Nummernanzeige-Objekten Methoden-Aufruf: objekt.methode(parameter); Zeitanzeige ist ein String aus zweistelliger Angabe der Stunden, dem „:“ als Trennzeichen und den Minuten. public void setUhrzeit(int stunde, int minute){ stunden.setWert(stunde); minuten.setWert(minute); anzeigeAktualisieren(); } //setzeUhrzeit private void anzeigeAktualisieren(){ zeitanzeige = stunden.getAnzeigewert() + ":" + minuten.getAnzeigewert(); } //anzeigeAktualisieren Methoden setWert(int wert) und getAnzeigewert() aus Klasse Nummernanzeige werden benutzt. Uwe Lämmel Klassendefinition und Objekte Folie 32 Klasse Uhrenanzeige: Methoden 2 /** * - Operation einmal pro Minute aufrufen * - sorgt dafür, dass die Uhrenanzeige um eine Minute * weiter gestellt wird. */ public void taktsignalGeben( ) { minuten.erhoehen( ); if (minuten.gibWert( ) == 0) { // Stunde vorbei, nach 59 folgt 0; stunden.erhoehen( ); // nächste Stunde einstellen } //if anzeigeAktualisieren(); // String zeitanzeige aktualisieren } //taktsignalGeben Uwe Lämmel Klassendefinition und Objekte Folie 33 Zusammenfassung Uwe Lämmel Klassen bilden reale/virtuelle Welt ab Klassen beschreiben Objekte Klasse: Merkmale, Konstruktoren, Methoden Merkmale = Instanzen-Variablen – Menge der Werte = Zustand des Objekts Konstruktor: erzeugt Objekt Zugriffsmethoden: lesend, schreiben Methoden können … – Zustand des Objekts ändern – Parameter besitzen – ein Ergebnis liefern Objekte können andere Objekte benutzen Klassen fördern Modularisierung Modularisierung fördert Wiederverwendung Klassendefinition und Objekte Folie 34 Aufgabe Implementieren Sie das Uhr-Beispiel Wertungsaufgabe – Datumsanzeige 14.10.23 (alle Monate 30 Tage) – dazu Klasse Nummernanzeige nutzen Erweiterung der Datumsanzeige – Korrekte Zahl der Tage je Monat – Schaltjahr Uwe Lämmel Klassendefinition und Objekte Folie 35
© Copyright 2024 ExpyDoc