Was sind die Eigenschaften von Java?
Java benannt nach einer Kaffeesorte von Bohnen der Insel Java wurde ursprünglich für Konsumerelektronik entwickelt. Es sollte in Haushaltsgeräten, Handys, ... als eine portable Sprache plattformunabhängig funktionieren.
Die Hauptvorzüge von Java sind daher:
Warum Java?
- plattformunabhängig
WORA (write once, run anywhere)
- gilt als sicher
(lässt keine lokalen Zugriffe zu auf den aufrufenden Rechner)
- Sprache des Web
- objektorientiert
(Einheit von Daten und Funktionen, Vererbung)
- Multithreading (Parallelbearbeitung)
- robust, fehlertolerant
(auch bei Fehlern wieterhin laufend)
- verteilte Architektur (jre)
Prinzipien der Objektorientierung:
Grundgedanke ist die Zusammenfassung von Daten und Funktionen (Methoden). Ein Beispiel:
Die Klasse Katze besitzt die Attribute: Fellfarbe, Name, Augenfarbe, ... Sie hat die Methoden: fressen, trinken, Maeuse jagen, ...
Eine Klasse kann wie eine Typdefinition verstanden werden. Klassen können in einer Klassenhierarchie (Vererbungsbeziehung) hierarchisch angeordnet sein. Untergeordnete Klassen (Subklassen) erben Attribute und Methoden der übergeordneten Klassen (Superklassen). Ein Objekt ist eine Ausprägung (=Instanz) einer Klasse.
Die verwandte SE-Methode ist hier UML
- Objektidentität
Jedes Objekt ist eundeutig verifiziert.
Objekt bleibt die ganze Zeit eindeutig identifizierbar im Lebenszyklus mittels einer eindeutigen Referenz. Es hat eine eindeutige Identifizierung (Speicheradresse) während der Lebensdauer.
Objektidentität: Jedes Objekt
verfügt während seiner
Lebensdauer über eine
eindeutige Identität. Diese
Identität kann auch nicht durch
Änderung des Zustands des
Objektes geändert werden.
- Kapselung
Es gibt die Möglichkeit objecte zugriffsabhängig zu gestaltetn (public/private))
Objekt läßt nach außen nur Funktionen durch, aber nicht, wie diese umgesetzt werden. Attribute sind nach außen nicht erkennbar.
Datenkapselung: Die interne
Darstellung der Daten eines
Objektes und deren Verarbeitung
durch die Methoden ist nach
außen nicht sichtbar. Daten und
Funktionen eines Objektes
werden ausschließlich über eine
genau definierte Schnittstelle
zugänglich gemacht.
Bei der Datenkapselung wird zwischen privaten Methoden, die nach außen gar nicht
sichtbar sind, und öffentlichen Methoden unterschieden, die die Aufrufschnittstelle des
Objektes nach außen darstellen. Die Attribute eines Objektes dürfen nur durch die
Methoden des Objekts selbst, nicht jedoch von außen verändert werden. Die Objekte
lassen auf diese Weise nach außen nur erkennen, was sie ausführen können, jedoch
nicht, wie die Ausführung erfolgt. In modernen objektorientierten Sprachen gibt es
verschiedene Stufen der Kapselung, z.B. private, protected, public etc. Bei geringer
Programmierdisziplin (z.B. grundsätzlicher Definition aller Methoden als public) wird die
Datenkapselung weitgehend ad absurdum geführt.
- Vererbung
Es herrscht eine strenge Monovererbung. Klassen können voneinander erben und die Unterschiede dann anpassen.
Vererbung: Objekte können
Daten und Methoden erben bzw.
vererben. Wie das erfolgt wird
bei der Modellierung der
Klassenhierarchie definiert.
Die Vererbung führt bei der
Implementierung zu
Aufwandsersparnis.
- Polymorphismus
Die Art der Implementierung der Funktion kann individuell sein. Gemeinsame Oberklassen liefern Methoden, jedoch kann es in den Unterklassen Unterschiede in diesen durch Abwandelung geben.
Polymorphismus: Methoden mit
gleichem Namen können je nach
Kontext, in dem sie aufgerufen
werden, verschiedene
Reaktionen auslösen, da je nach
Stelle in der Klassenhierarchie
eine andere Methode „gezogen“
wird
Polymorphismus verleiht objektorientierten Systemen Mächtigkeit, stellt aber auch eine
erhebliche Fehlerquelle dar, falls z.B. der Entwickler die Übersicht über die Klassenhierarchie
verliert, und nicht klar ist, was bei Aufruf einer Methode mit einem bestimmten
Namen überhaupt geschieht.
Wichtige Werkzeuge:
JVM java virtual machine (führt Javaprogramme aus .class)
JAVAC java compiler (wandelt .java in ausführbare .class um)
JAVADOC Dokumentationsprogramm
JAR java archiver (.class Sammler)
Applett Viewer JavaApplett ausserhalb des Browser ansehen
Systematik:
Klassen ist ein abstrakter Begriff von denen die Objekte Instanzen sind.
HelloWorld.java
// Title: Hello World
// Version: 1.0
// Copyright: Copyright (c) 2003
// Author: Andreas Unkelbach
// Company: FH Giessen-Friedberg
// Description: Practise for Systemmessage
public class HelloWorld
{
public static void main(String[] args)
{
Student stud1 = new Student();
stud1.setId(1);
stud1.setName("Andreas Unkelbach");
stud1.setMatrikel("123456");
System.out.println("Dieses ist ein Test");
System.out.println(stud1.toString());
}
}
Student.java
// Title: Hello World _ Studenten
// Version: 1.0
// Copyright: Copyright (c) 2003
// Author: Andreas Unkelbach
// Company: FH Giessen-Friedberg
// Description: Practise for Set and Get
public class Student
{
private int id;
private String name;
private String fach;
private String matrikel;
// Get Methoden zur Ausgabe der Werte
public int getId() { return id; }
public String getName() { return name; }
public String getMatrikel() { return matrikel; }
// Set Methoden zum Fuellen der Werte
public void setId(int newId)
{
id = newId;
}
public void setName(String newName)
{
name = newName;
}
public void setMatrikel(String newMatrikel)
{
matrikel = newMatrikel;
}
public String toString()
{
return id + " " + name + " " + matrikel;
}
}
Datum.java
// Title: Hello World _ Studenten
// Version: 1.0
// Copyright: Copyright (c) 2003
// Author: Andreas Unkelbach
// Company: FH Giessen-Friedberg
// Description: Practise for date analys
public class Datum
{
public static boolean isLeapYear(int year)
{
return
( year % 4 == 0) && // year divisible by 4? and
( (year % 100 != 0 ) || // year not divisible by 100 or
( year % 400 == 0) ); // year divisible by 400
}
public static int lastDayInMonth(int month, int year)
{
int lastDayInMonth = 0;
switch (month)
{
case 4:
case 6:
case 9:
case 11: lastDayInMonth = 30;
break;
case 2: lastDayInMonth = ( (isLeapYear(year)) ? 29:28);
break;
default: lastDayInMonth =31;
break;
}
return lastDayInMonth;
}
}
Klausur.java
// Title: Hello World _ Studenten
// Version: 1.0
// Copyright: Copyright (c) 2003
// Author: Andreas Unkelbach
// Company: FH Giessen-Friedberg
// Description: Practise for Loops
public class Klausur
{
public static void main(String[] args)
{
int jahr=2004;
int monat=1;
int tag=19;
int lastday = Datum.lastDayInMonth(monat,jahr);
// Uebung Schleifen:
// Teil I: FOR SCHLEIFEN
// Wir wollen alle Tage bis zum Monatsende ausgeben
// Hierzu beziehen wir den letzten Tag des Monats
// aus der Klasse Dateum.
for ( int temp1=tag;
temp1<= lastday;
temp1++)
{
System.out.println(temp1 + " " + monat + " " + jahr);
}
// Selbige Ausgabe, aber maximal 4 Tage lang
for ( int temp3 = tag, i = 0;
temp3<= lastday && i < 4;
temp3++,i++)
{
System.out.println(temp3 + " " + monat + " " + jahr);
}
// Teil II: While Schleifen:
// Alle Tage bis Monatsende
int temp2 = tag;
while(temp2<=lastday)
{
System.out.println(temp2+ "/"+" "+monat+"/"+jahr);
temp2=temp2+1;
}
// Alle Tage bis max. 4
int temp4= tag;
int laufzeit=0;
while (temp4<=lastday)
{
System.out.println(temp4+"/"+ monat+"/"+jahr);
temp4 = temp4+1;
if (++laufzeit == 4) break;
}
} // EO Main
}
|