This is just a demo map that you can delete right away, if you feel like it...
Assistent: Martin Krammer, martin.krammer@tugraz.at, Institut für Bauinformatik
Studienassistent: Michael Wittmayer,, michael.wittmayer@student.tugraz.at
genau - siehe TUGonline Gruppe 4
prinzipiell von 0900 (c.t.) bis 1045
quasi das Programm
dann "Packages", sind Ordnerstruktur auf der Festplatte, darin "Classes" (Java-Klassen), in .java Textdateien auf der Festplatte - der SourceCode (Quelltext), diese beinhalten, Variablen, während der Ausführung von Methoden., Methodenvariablen = lokale Variablen, innerhalb von Methoden deklariert, im jeweiligen Methodenblock public class Bruch{...public double wert{int counter...}...}, definieren Zustand in der Klasse/ im Objekt, Klassenvariablen/Instanzvariablen, außerhalb von Methoden deklariert, im jeweiligen Klassenblock public class Bruch{int zaehler...}, nur sichtbar/benutzbar/ansprechbar innerhalb des Blocks, in welchem sie deklariert wurden... Theman "Sichtbarkeit/Scope", Methods (Methoden), definieren Verhalten der Klasse, "was soll wie, wann etc. passieren"... Geschäftslogik, public static void main(Strg[] args), ist eine spezielle Methode, Java Compiler weiß, dass das Programm mit der main-Methode beginnt. "Startmethode", Klassen sind die programmatische Umsetzung/Abstraktion der Problemstellung/der Umwelt., z.B. in Übungsblock 1: wir wollen mit mathematischen Brüchen rechnen -> daher Klasse Bruch, die so gestaltet ist wie wir sie brauchen, Umsetzung der Realität nur soweit notwendig, obwohl man mathematische Brüche eigentlich "erweitern" kann, gibt es in unserem Programm keine public-Methode für diese Funktionalität.
jedes Objekt hat alles (Eigenschaften, Verhalten) was die Klasse vorgibt., static-Eigenschaften von Klassen, static-Methoden, diese Methoden gehören zur Klasse. D.h. man ruft sie nicht auf einem Objekt der Klasse auf, sondern direkt. D.h. man muss nicht ein Objekt mit new erzeugen, um eine static Methode in dieser Klasse auszuführen., static-Methoden führen Sachen aus, die nicht unbedingt zu einem bestimmten Objekt gehören; die eher allgemein für alle Objekte dieser Klasse von Bedeutung sind bzw. komplett allgemein sind (z.B. main als Startmethode für das ganze Programm), static-Methoden können nur static-Variablen verwenden bzw. die in ihnen selbst deklarierten lokalen Variablen, das ist einleuchtend, da nicht-static Methoden/Variablen immer zum jeweilig gerade instantiierten Objekt gehören, static-Sachen aber für die Klasse selbst bzw. für alle Objekte gemeinsam., static-Variablen, "static-Variablen gehören zur Klasse." Jedes Objekt dieser Klasse "besitzt" nur ein und dieselbe Variable, nicht jedes eine eigene., ändert z.B. ein Objekt der Angestellten-Klasse die Variable static float steuersatz auf 0.33, dann ist dies für jeden Angestellten so., ein weiterer Einsatz von static-Variablen ist z.B. ein Zähler für instantiierte Objekte einer Klasse... bei jeder Objekterzeugung der Klasse Fahrzeug wird ein static int fahrzeugCounter inkrementiert (dies passiert idealerweise im Constructor der Klasse). Dadurch ist zu jedem Zeitpunkt schnell ersichtlich, wieviele Fahrzeuge derzeit im Programm "herumfahren".
Analogie zum Bauplan... Mit einem HausPlan (=Haus-Klasse) könnten durchaus mehrere gleiche Häuser (Haus-Objekte) gebaut werden.
Objekterstellung/ Instantiierung mit new-Operator, z.B. in Übungsblock 1: new Bruch(1,2), retourniert ein Bruch-Objekt mit Zähler 1 und Nenner 2., Bruch meinBruch = new Bruch(1,2), damit wird das neu instantiierte (mit new) Bruch-Objekt "gleich in die Bruch-Variable meinBruch gespeichert (mit =, Zuweisung)". meinBruch wird durch "Bruch meinBruch" deklariert.
nur weil ein Programm in Java geschrieben ist, ist dieses noch lange nicht schön objektorientiert...
Zusammenspiel wird durch public-Methoden/Variablen möglich.
= Nutzung fremder Eigenschaften/Ressourcen
= Methodenaufrufe auf fremden Objekten
schnell; visuell
aus den UML-Diagrammen lässt sich auch automatisch der Code(rumpf) generieren., dazu richtige UML-Tools notwendig, Omondo EclipseUML, Soyatec eUML2, damit erspart man sich das Abtippen der notwendigen Klassen/Methoden/Variablen
Klassendiagramme (Struktur)
Aktivitätsdiagramme
Sequenzdiagramme usw.
vermittelt schnell, was das Programm können soll und wie es aufgebaut ist bzw. funktioniert.
weiß alles
z.B. sehr witzig und gedruckt: "Java von Kopf bis Fuß"
Online-Buch: "Java ist auch eine Insel"
Referenztypennamen beginnen mit einem Großbuchstaben und dann CamelCase
alles was mit new-Operator instantiiert wird, z.B. Bruch-Objekte, Constructor, ein Konstruktor steuert die Objekterzeugung bzw. leitet sie ein., heißt gleich wie die Klasse und hat eventuell Parameter z.B. Bruch(int zaehler, int nenner) oder Bruch(), es kann mehrere Konstruktoren geben, aber die Parameterliste muss unterschiedlich sein., quasi eine spezielle Methode, die man nur mit vorangestellten new-Operator aufrufen kann. Retourniert ein neues Objekt dieses Typs, Objekterzeugung = Instantiierung
sind jene Klassen die man selber schreibt. Klassen definieren einen neuen (Referenz-)Typ
Spezialfall BOXING, um elementare Typen mit Funktionalität zu erweitern gibt es Wrapper-Klassen, die diese in Objekte "einpacken". Vorteil: man hat plötzlich Zusatzfunktionen (Methoden) für die Typen zur Verfügung (z.B. Integer.parseInt(...))., dieses Boxing ermöglicht die Verwendung von elementaren Datentypen in generischen Datentypen z.B. ArrayList, Java macht dieses Ein- und Auspacken zur rechten Zeit automatisch... AUTOBOXING, eingebaute Wrapperklassen für die elementaren Typen, Boolean, Byte, Short, Integer, Long, Float, Double, Character, Boolean
Deklaration einer Variablen mit Referenztyp, z.B. Bruch myBruch;
Wahrheitswerte, boolean, true oder false
Zeichen, char, 16bit, 0 bis 2^(16), 0 bis 65535
vorzeichenbehaftet, Ganzzahlen, byte, 8bit, -2^(8) bis 2^(8)-1 ..."-1 wg. Null", -128 bis 127, short, 16bit, -2^(16) bis 2^(16)-1 ..."-1 wg. Null", -32768 bis 32767, int, 32bit, -2^(31) bis 2^(31)-1 ..."-1 wg. Null", -2147483648 bis 2147483647, long, 64bit, Kommazahlen, float, 32bit, double, 64bit
String, ein Spezialfall, aber üblicherweise gleich zu verwenden ist, wie eine Variable mit elementarem Datentyp
Deklaration einer Variablen mit elementarem Typ, int myInteger;, short myShort;, float myFloat;, double myDouble;, char myCharacter;
es ist nämlich unwahrscheinlich, dass man selbst effizienter programmiert, als die "Java-Hersteller"
z.B. java.lang.Math-Klasse, Mathematik-Funktionen, enthält nur static-Methoden, daher keine Objekterzeugung mit new-Operator nötig/möglich, einfach z.B. Math.pow(2,3) für 2^(3), Math.round(3.3), gibt 3 zurück, Math.abs(-11), Betragsfunktion/Absolutwert, somit im Package java.lang
java.util.Scanner-Klasse, zum Einlesen von Text, von Tastatur (System.in), von einer Textdatei, somit im Package java.util
diese Sachen zeigt auch Eclipse an, wenn ihr mit der Maus über eine dieser API-Klassen/Methoden drüberfahrt... warum? - Stichwort JavaDOC
z.B. SVN Plugin - SubClipse, Codeverwaltung (Versionen, Revision...) über "Subversion (SVN)", SVN von der TU Graz gut unterstützt, jeder an der TU Graz kann selbst SVN-Projekte anlegen... siehe TUGrazOnline Visitenkarte, lohnt sich nicht nur zur Programmierprojektverwaltung in Teams, sondern auch für andere Projekte, quasi Fileshareing/-authoring wo zentral immer das aktuelle Dokument liegt.