Einführung in die Programmierung Klassendefinition und Objekte Fakultät für Wirtschaftswissenschaften Einführung in die Programmierung Klassendefinition und Objekte Uwe Lämmel www.wi.hs-wismar.de/~laemmel Uwe.Laemmel@hs-wismar.de
Inhalt Klasse Methoden Parameter Erzeugung und Nutzung von Objekten Bauplan: Zweck, Aufbau, Entwurf ausführbare Klasse Bibliotheksklasse Methoden Konstruktor Zugriff Ausgabe Verarbeitung Parameter Erzeugung und Nutzung von Objekten
Klasse repräsentiert alle Objekte eines Typs (Bauart), z.B.: "Student ", "Ticketautomat " beschreibt Objekte mittels: Daten = Merkmale (Attribute, Instanz-Variablen) Aktionen = Methoden
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?
Ticket-Automat: interne Sicht Klasse muss Objekte so beschreiben, dass gewünschtes Verhalten erreicht wird Merkmale? Methoden? preis bisherGezahlt gesamtsumme anzVerkaufterTickets Konstruktor getPreis getBisherGezahlt geldEinwerfen ticketDrucken
Merkmal (Datenfeld, Instanz-Variable) Instanz-Variablen speichern Merkmale BlueJ: "inspect" zeigt die Merkmale eines Objekts Werte der Instanz-Variablen = Zustand eines Objekts public class TicketAutomat{ private int preis; private int bisherGezahlt; private int gesamtsumme; //hier: Konstruktoren und Methoden } //TicketAutomat Sichtbarkeit Typ Name der Variable private int preis;
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
Daten-Übergabe mittels Parameter TicketAutomat bus = new TicketAutomat(500);
Zuweisung (Assignment) variable = expression; Werte in Variablen speichern: preis = ticketPreis; bisherGezahlt = 0; Variable speichert NUR EINEN Wert; vorheriger Wert verloren
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 … }
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)
Zugriffsmethode, schreibend Verändert die Merkmale eines Objekts besitzt (meist) Parameter kein Ergebnis-Typ (void) enthält Zuweisungen an Instanz-Variable Sichtbarkeit (kein) Ergebnis-Typ Methodenname Parameterliste public void setPreis(int neu){ preis = neu; } //setPreis Zuweisung Kommentar zur schließenden Klammer Anfang und Ende des Methoden-Körpers (block)
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
Klasse = Bauplan Merkmale Konstruktoren Methoden class Klasse { // 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 Merkmale Konstruktoren Methoden
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
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
Aufgabe selbst erarbeiten! 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!
Zusammenfassung 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 Zuweisung Wert an Variable: Speicher
Digitale Uhr: Klassen und Objektinteraktion Eine Anzeige aus 4 Ziffern? Zwei Anzeigen zu je 2 Ziffern?
Abstraktion und Modularisierung Details ignorieren Konzentration auf Wesentliches Modularisierung Teilen der Aufgabe in kleinere Teile getrennte Lösung der Teilprobleme Interaktion der Teillösungen
Klasse Nummeranzeige public class Nummernanzeige { private int limit; private int wert; // Konstruktor und // Methoden fehlen hier. } // Nummernanzeige
Klasse Uhrenanzeige public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; // Konstruktor und // Methoden fehlen hier! } // Uhrenanzeige
Objekt-Interaktion
Klassendiagramm
Klasse Uhrenanzeige public class Uhrenanzeige { private Nummernanzeige stunden; private Nummernanzeige minuten; private String zeitanzeige; // techn. Gründe public Uhrenanzeige (){ stunden = new Nummernanzeige(24); minuten = new Nummernanzeige(60); anzeigeAktualisieren(); } // Uhrenanzeige // hier folgen weitere Methoden! } // Uhrenanzeige Merkmale Konstruktor
Methoden der Klasse Uhrenanzeige public String gibUhrzeit(){ return zeitanzeige; } public void setzeUhrzeit(int stunde, int minute){ stunden.setzeWert(stunde); minuten.setzeWert(minute); anzeigeAktualisieren(); } //setzeUhrzeit private void anzeigeAktualisieren(){ zeitanzeige = stunden.gibAnzeigewert() + ":" + minuten.gibAnzeigewert(); } //anzeigeAktualisieren Methoden-Aufruf: setzWert(int wert) und gibAnzeigewert() in Klasse Nummernanzeige definieren!
Methoden der Klasse Uhrenanzeige /** * - Operation einmal pro Minute aufrufen * - sorgt dafür, dass diese Uhrenanzeige um eine Minute * weiter gestellt wird. */ public void taktsignalGeben( ) { minuten.erhoehen( ); if (minuten.gibWert( ) == 0) { // Limit wurde erreicht! stunden.erhoehen( ); } //if anzeigeAktualisieren(); } //taktsignalGeben
Methoden der Klasse Nummernanzeige public Nummernanzeige(int anzeigeLimit) { limit = anzeigeLimit; wert = 0; } //Konstruktor // Zugriffsmethoden: public int gibWert() { return wert; } public String gibAnzeigewert() { if(wert<10) { return "0" + wert;} else { return "" + wert; } } //gibAnzeigewert public void setzeWert(int ersatzwert) { if((ersatzwert >= 0) && (ersatzwert < limit)) { wert = ersatzwert; } //if } //setzeWert
Zusammenfassung 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
Ende