860 likes | 949 Views
Aufgabe: Erstellen Sie die Klasse Punkt , (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen Oberfläche repräsentieren soll. Erzeugen Sie auch ein paar konkrete Punkte.
E N D
Aufgabe:Erstellen Sie die Klasse Punkt, (mit den entsprechenden Attributen und Methoden), die einen Punkt (Pixel) in einer grafischen zweidimensionalen Oberfläche repräsentieren soll.Erzeugen Sie auch ein paar konkrete Punkte.
Um anzudeuten, dass es sich um Pixel handelt, wird im Folgenden den x- und y-Koordianten eines Punktes der Datentyp integer gegeben. Man könnte aber genauso den Datentyp double verwenden.
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } } // Klasse Punkt kommt gleich...
class Punkt{ private int x; private int y; public Punkt(){ x=0; y=0; } public Punkt(int px, int py){ setPunkt(px,py); } public void setPunkt(int px, int py){ x=px; y=py; } privater Bereich: Auf die Member des privaten Bereichs kann außerhalb der Klasse nicht direkt, sondern nur indirekt über Methoden des public Bereichs dieser Klasse zugegriffen werden. Name der Klasse öffentlicher Bereich: Auf die Member dieses Bereichs kann man jederzeit zugreifen.
public void setX(int px){ x=px; } public void setY(int py){ y=py; } public int getX(){ return(x); } public int getY(){ return(y); } }
Wir gehen die Anweisungen von main Schritt für Schritt durch ...
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } } Der Compiler legt keinen an, da schon ein Konstruktor (mit 2 Parametern existiert) --> Fehlermeldung Nebenbei: Was passiert, wenn der Standardkonstruktor nicht existiert?
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } } Fehlermeldung: x ist private (ein privater Bereich)
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
public class MainKlassen5{ public static void main(String[] args) throws Exception{ int kx,ky; Punkt p; p=new Punkt(); p.setPunkt(3,5); p.x=12; p.setPunkt(7,9); kx=p.getX(); ky=p.getY(); } }
Nochmals zu den Zugriffsrechten (erklärt an Ausschnitten des letzten Programms).
Abkürzungen:ZvA: Zugriff von außerhalb einer KlasseZvI: Zugriff von innerhalb eines Klasse
Zugriff innerhalb einer Klasse bedeutet den Zugriff auf ein Member von innerhalb einer Methode der Klasse. Beispiel: public void setPunkt(int px, int py){ x = px; y = py; } Zugriff auf die Member x und y
Zugriff außerhalb einer Klasse bedeutet den Zugriff (von einer anderen Klasse) auf ein Member einer anderen Klasse mit Hilfe des Punkts . Beispiel: public static void main(...){ Punkt p = new Punkt(2,8); p.setPunkt(5,13); } Von einer anderen Klasse (z.B. der Startklasse) wird auf das Member setPunkt(...) der anderen Klasse Punkt zugegriffen.
Wie kann man sich merken, dass außerhalb mit einem Punkt zusammenhängt? ... anderen Klasse (bzw. außerhalb) außerhalb fängt mit einem a an, also ... ... jetzt wird das a ausgefüllt ... ... und der Balken entfernt, dann hat man einen ...
// main(...){ p.x=12; p.setPunkt(7,9); } class Punkt{ private int x; private int y; public Punkt(int px, int py){ setPunkt(px,py); } public void setPunkt(int px, int py){ x=px; y=py; } } privater Bereich: Auf die Member des privaten Bereichs kann außerhalb der Klasse nicht direkt, sondern nur indirekt über Methoden des public Bereichs dieser Klasse zugegriffen werden. öffentlicher Bereich: Auf die Member dieses Bereichs kann man jederzeit zugreifen.
// main(...){p.x=12; p.setPunkt(7,9); } class Punkt{ private int x; private int y; public Punkt(int px, int py){ setPunkt(px,py); } public void setPunkt(int px, int py){ x=px; y=py; } } ZvA auf private Member x: verboten ZvA auf public Member setPunkt: erlaubt Begründen Sie, ob die rot markierten Zugriffe auf Member der Klasse erlaubt sind oder nicht. ZvI auf public Member setPunkt: erlaubt ZvI auf private Member x: erlaubt ZvI auf private Member y: erlaubt
Eine Klasse kann durch die sogenannte UML (Unified Modeling Language) beschrieben werden.
UML ist eine formale Sprache zur objektorientierten Spezifikation, Visualisierung, Konstruktion und Dokumentation von Softwaresystemen und Geschäftsmodellen.
Mit UML kann man z.B.die Klasse Punkt wie folgt durch ein sogenanntes Klassendiagramm darstellen:
Attribute Methoden - bedeutet: Attribut bzw. Methode ist privat + bedeutet: Attribut bzw. Methode ist public
Warum soll man folgende Aussage befolgen ?"Nur Mit Hilfe der Methoden soll man auf die Attribute zugreifen (lesen bzw. ändern der Attribute)"
Übrigens:Das Prinzip, daß die Daten eines Objekts nur mit den eigenen Methoden des Objekts manipuliert werden können, nennt man"Datenkapselung"
Warum macht man diesen Umweg über die Methoden, also die Datenkapselung ?Warum greift man nicht direkt auf die Attribute zu ?
Schauen wir uns dazu ein paar Beispiele aus der “täglichen“ Praxis an...
Warum benutzen wir an der Kasse im Supermarkt als “Werkzeug“ den Kassierer, um auf die Kasse zuzugreifen ?Warum machen wir das nicht direkt (ohne den Kassierer) ?
Weil man dann den Kassenstand auf einen unerwünschten Wert verändern und einen ungewollten Ortswechsel der Kasse veranlassen kann!
Warum benutzen wir am Bankschalter als “Werkzeug“ die EC-Karte, um auf die Kasse der Bank zuzugreifen ?Warum machen wir das nicht direkt (ohne Banker oder ohne EC-Karte) ?
Weil man dann den Kassenstand auf einen unerwünschten Wert verändern kann !
Warum wird in einigen Autos als “Werkzeug“ das ABS-System benutzt ?Warum bremst man nicht direkt mechanisch (ohne Elektronik) ?
Weil man dann die Bremskraft auf einen unerwünschten Wert verändern kann (Bremsen blockieren)!
Warum wird in einigen Häusern als “Werkzeug“ ein Thermostat verwendet, um die Temperatur zu regeln ?Warum macht man dies nicht direkt (einfüllen von Heizöl in den Ölofen) ?
Weil man dann z.B. in kürzester Zeit zu viel Heizöl in den Ofen leeren kann und es dann zu nicht gewünschten Verbrennungseffekten (Ofen explodiert !) kommen kann.
Im Airbus, dem vollelektronischen Flugzeug, greift der Pilot nur über die Elektronik auf das Höhenruder, usw. zu
Die Opferbüchse in der Kirche besitzt eine Vorrichtung, die den Geldfluß nur in eine Richtung zuläßt.
Der Zugriff über die Boxhandschuhe auf den Körper des Gegners schützt diesen zumindest in einem gewissen Maße.
Die Verheiratung von Ehepartnern geschieht durch eine untere Verwaltungsbehörde. Dadurch sollen unerwünschte Vermählungen der handelnden Subjekte (enge Verwandtschaft, Artenschrankenüberschreitung) verhindert werden.
Diese Werkzeuge (Kassierer, EC-Karte, ABS-System, usw.) werden so gebastelt, daß sie es nicht erlauben, bestimmte Systemparameter (Geldmenge in Kasse, usw.) auf unerwünschte Werte abzuändern.
In Java sind diese Werkzeuge Methoden, die es dem Klassen-Programmierer(= Programmierer, der Klassen verwendet) nichterlauben, die Attribute auf unerwünschte Werte abzuändern.
Wenn eine Methode dies garantiert, nennt man dies auch Zusicherung (englisch: constraint)