Klassen - BFH-TI / Organisation

Werbung
Objektorientiertes Programmieren
• Hat Softwareentwicklung revolutioniert
• Ist bei heutigen grossen Softwareprojekten nicht
mehr wegzudenken
• Hat viele Vorteile gegenüber rein prozeduraler
Programmierung
• Java ist (voll) objektorientiert.
1
Die wichtigsten
objektorientierten Begriffe:
•
•
•
•
•
•
•
•
•
Klassen
Objekte
Member, Methoden
Konstruktor
Kapselung
Überladen
Vererbung
Polymorphismus
Überschreiben
2
Klassen, Objekte
Beispiel: Haus
Programmierebene:
Klasse
Reale Welt:
Haus
Bauplan
entspricht
Objekte von Klasse „Haus“
Gebaute Häuser anhand Bauplan
Haus 1
Haus 3
Haus 2
3
Klassen, Objekte
Beispiel: Mensch
Programmierebene:
Klasse
Reale Welt:
Mensch
DNS
entspricht
Objekte von Klasse „Mensch“
Erzeugte Menschen gemäss DNS
Werner
Julia und
Hanna
Katja
4
Deklaration einer
neuen Klasse in Java
Name der Klasse
public class Rechteck {
}
hier wird der Sourcecode
bzw. der „Bauplan“
der Klasse eingetragen
5
Member (Daten)
Methoden (Funktionen)
Beispiel: Auto
Programmierebene:
Reale Welt:
Klasse
Auto
Rad
Motor
Achsen
...
...
Fahren()
Bremsen()
Blinken()
...
...
R1, R2, R3, R4
Motor2Takt
VAchse, HAchse
Motor2Takt
R4
Daten
(Attribute)
(Eigenschaften)
HAchse
R3
VAchse
R2
Methoden
(Funktionen)
(Sub, Function)
R1
6
Member können sein:
• Basisdatentypen:
Integer, Double, Boolean, etc
• Objekte vorhandener Klassen:
String, Date, etc.
• Objekte selbst erstellter Klassen:
Rad, Kreis, Punkt, Person, etc.
7
Member einer Klasse in
Java hinzufügen
public class Rechteck {
//member
public String name;
public int x,y;
public int breit,hoch;
}
8
Methoden einer Klasse in
Java hinzufügen
public class Rechteck {
//member
public String name;
public int x,y;
public int breit,hoch;
//methods
public void verschieben(int dx, int dy)
{
x=x+dx; y=y+dx;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}
9
Konstruktor:
Methode in einer Klasse mit dem selben
Namen wie die Klasse, welche bei der
Erzeugung eines Objekts der Klasse
aufgerufen wird.
10
Konstruktor
Rechteck R1 = new Rechteck(10,5,150,50);
erzeugt Objekt aus Klasse
Im vorliegenden Beispiel werden
vier Rechteck-Objekte mit den Namen:
R1, R2, RQ und Rt
erzeugt
Rechteck
public int x,y,breit,hoch;
Rechteck R2 = new Rechteck(0,0,90,55);
Konstruktor erzeugt Objekte
aus der Klasse „Rechteck“
Rechteck RQ = new Rechteck(1,5,40,58);
Rechteck(x,y,b,h)
Rechteck Rt = new Rechteck(0,0,20,130);
11
Konstruktor einer Klasse in
Java hinzufügen
public class Rechteck {
//member
public String name;
public int x,y;
public int breit,hoch;
public Rechteck(int x, int y,int b, int h)
{
this.x=x;
this.y=y;
breit=b;
hoch=h;
}
Konstruktor
//methods
public void verschieben(int dx, int dy)
{
x=x+dx; y=y+dy;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}
12
Konstruktor
Beispiel Klasse Person
public class Person {
String Name;
int Age;
String profession;
//Konstruktor
public Person(String N, int age, String p)
{
Name=N;
Age=age;
profession=p;
}
public void Anzeigen()
{
System.out.println("Name: " + Name + " Alter: " + Age + " Beruf: " + profession);
}
}
13
Konstrukor
erzeugen von Objekten in der ClientKlasse
In der Klasse „FH_Biel“ werden drei neue Personen erzeugt.
Man nennt solch eine Klasse auch „Client“, da sie die Klasse Person benutzt.
//Clientclass for Person
public class FH_Biel {
public static void main(String[] args) {
Person p1=new Person("Walter Kuhn",23,"Schreiner");
Person dagobert=new Person("Dagobert Duck",64,"Milliardaer");
Person p2=new Person("Sigmund Freud",77,"Psychoanalytiker");
}
p1.Anzeigen();
dagobert.Anzeigen();
p2.Anzeigen();
}
14
Information Hiding:
Daten und Funktionen werden in der
Klasse nach aussen „abgeschirmt“ oder
versteckt.
15
Information Hiding
Klasse Student:
setGroesse(double g)
Daten sind nur über
Schnittstellenmethoden
zugänglich.
String getName()
setName(String s)
private String Name
private int Alter
private double Groesse
int getAlter()
setAlter(int a)
double getGroesse()
16
Member sind private
public class Student {
//Members
private String Name;
private int Alter;
private String Fachbereich;
//Methods
public Student(String name) {
Name = name;
}
public int getAlter() {
return Alter;
}
Information Hiding
public void setAlter(int alter) {
Alter = alter;
}
Klasse StudentGekapselt:
public String getFachbereich() {
return Fachbereich;
}
public void setFachbereich(String fachbereich) {
Fachbereich = fachbereich;
}
public String getName() {
return Name;
}
}
public void setName(String name) {
Name = name;
}
17
Gekapselter und
nicht gekapselter Zugriff
auf Daten einer Klasse:
Hidden (versteckt)
Not hidden (nicht versteckt)
Student
Student
private String Name;
private int Alter;
private String Fachbereich;
public String Name;
public int Alter;
public String Fachbereich;
Student hans = new Student(...);
Student hans = new Student(...);
hans.Alter=18;
hans.Fachbereich="Mikrotechnik";
String fb=hans.Fachbereich;
hans.setAlter(18);
hans.setFachbereich("Mikrotechnik");
String name=hans.getFachbereich();
Zugriff auf
Member der
Klasse Student
18
Überladen einer Methode
public class Time {
private int hour,min,sec;
public void SetTime(int h, int m, int s)
{
hour=h;
Gleiche
min=m;
Methodennamen
sec=s;
}
}
Verschiedene
Parameter Datentypen
public void SetTime(int h, int m)
{
hour=h;
min=m;
sec=0;
}
Durch Überladen
der Methode SetTime(),
kann die Zeit mit oder ohne Sekunden
gesetzt werden.
SetTime(13,23,5);
SetTime(10,0);
19
Vererbung
• Bei der Vererbung wird gleicher Sourcecode in
einer Basisklasse zusammengefasst. Dadurch
wird bestehender Sourcecode wiederverwendet.
• Eine neue Klasse kann von einer bereits
bestehenden Klasse abgeleitet werden. Diese erbt
dann alle Member und Methoden der bestehenden
Klasse.
• Einer abgeleiteten Klasse kann zusätzliche
Funktionalität hinzugefügt werden.
20
Vererbung UML-Diagramm
Beispiel Spielkarte
Rectangle
In der Java Library bereits vorhandene
Klasse für ein Rechteck.
Der Source-Code kann nicht verändert werden.
Wird vererbt
Spielkarte
Spielkarte erbt alle Funktionalitäten von
Rectangle.
Spielkarte können jetzt alle nötigen Member
und Methoden hinzugefügt werden die für eine
Spielkarte benötigt werden.
21
Java Sourcecode
Klasse Spielkarte erbt Klasse Rectangle
Klassendeklaration mit dem Zusatz extends
public class Spielkarte extends Rectangle {
// hier kann Code zur Erweiterung eingesetzt werden
}
22
Herunterladen