Objekte mit Verhalten

Thisor

Bekanntes Mitglied
Hallo,
ich stelle fest das ich immer noch sehr viele defizite habe in Programmieren.
Genaue antworten konnte ich leider nicht im google finden, daher hoffe ich das ihr sie mir erklären könnt:
- Was ist bei Objekten mit "Verhalten" gemeint?
- Was sind "Ist-ein"-Beziehungen?
- Was sind "verhält-sich-wie ein"-Beziehungen?
- Was sind "Hat-ein"-Beziehungen?

Und hier kann ich mir noch so viele Definitionen davon reinlesen, aber das will einfach nicht in mein Kopf/Verständnis :

Was genau ist und macht eine ArrayList, HashMap?
Wozu benötige ich sie? Was sind die Unterschiede bzw wieso/wann bevorzuge ich das eine vor dem anderen?

lg
 

InfectedBytes

Top Contributor
Die Objektorientierung versucht sich analog zur realen Welt zu verhalten.
Ein Objekt hat eben "Verhalten", wenn es methoden besitzt welche ein bestimmtes verhalten verursachen.
"Ist-ein" Ein Hund ist-ein Tier, anders ausgedrückt: die klasse Hund erbt von Tier
"Verhält-sich" entspricht dem implementieren von interfaces. Ein Hund verhält sich wie ein Raubtier
"Hat-ein" sagt aus, das ein objekt ein bestimmtes Attribut besitzt. Der Hund hat beispielsweise ein Fell.

Eine ArrayList ist eben einfach eine List, deren größe veränderbar ist.
Falls du alle Tier auf der Welt speichern möchtest, könntest du natürlich auch für jedes eine eigene Variable anlegen, aber da dass äußerst unpraktisch ist, gibt es Listen. Denen fügst du einfach ein neues Tier hinzu und fertig.
Vorteil von ArrayList gegenüber einfachen Arrays ist es, dass Arrays eine feste größe haben. Die ArrayList hingegen passt ihre interne größe einfach an.

Eine HashMap erzeugt ein mapping von einem Wert auf einen anderen. Ein Beispiel hierfür wäre z.b. ein wörterbuch. Dort wird z.B. das deutsche Wort auf das englische abgebildet. Falls du nun wissen willst was "Hallo" auf englisch heißt, könntest du einfach im Wörterbuch nachschlagen

ArrayList und HashMap sind zwei verschiedene konzepte. Erstes ist einfach nur eine Liste, während das zweite eine Abbildung definiert.
 

Thisor

Bekanntes Mitglied
Okay, das erklärt so einiges, danke schonmal.

Was ich aber noch nicht begreifen kann oder mag ist das Interface:
Interface ist doch letztendlich wenn nicht nur, bloß eine Schnitstelle.
Wieso kommt dann da oben kein extends oder implements?

Edit:
Sind HashMap und ArrayList quasi Interface Methoden?
 

InfectedBytes

Top Contributor
du bringst hier sehr viel durcheinander.
Interfaces sind schnittstellen. Definiert werden sie eben durch
Java:
interface MyInterface {
  // ...
}
und implementiert werden so eben durch implements.

HashMap und ArrayList sind beides Klassen.
Wobei ArrayList beispielsweise die List schnittstelle implementiert
 

Thisor

Bekanntes Mitglied
Okay, ich weiß dann womit ich mich heute Abend noch beschäftigen werde.
Bin ich schonmal auf dem richtigen Weg wenn ich sagen würde, dass ArrayList und HashMap Objekte sind, ArrayList ist ein Container und HashMap ist ein Assoziativspeicher?
 

Thisor

Bekanntes Mitglied
Code (Java):
ArrayList<Integer> list = new ArrayList<>();
// list ist nun ein Objekt

Was ist denn das was in den Klammern <> steht? Eine Klasse? Ein Objekt?
Da könnte ja genauso gut String oder Double oder Auto stehen..
Und dieses "<>" verstehe ich allgemein nicht :(. Ist das nur die Schreibweise? Wenn ja, dann zu was? Dass Integer in die list kommt? Ich stoße unteranderem auch auf <?>, versteh ich nicht :(
 

Thisor

Bekanntes Mitglied
Dann heißt <?> soviel wie, das der Typ noch nicht bekannt ist?
Kann ich alle Buchstaben in die spitzen Klammern eingeben oder haben bestimmte Buchstaben eine bestimmte Bedeutung wie T für Typ, c für Collector bzw Container etc?

Was ich aber noch nicht ganz verstehe ist wieso man das macht.
Also eigtl steht da Object drin in den spitzen Klammern aber wenn da Object drinnen steht, kann jeder Typ reinkommen. Und wenn wir das nicht wollen, also bsp wir wollen nur Zahlen haben aber dann kommt ein Wort vor, typisieren wir das, und das was wir es typisieren, also in welchem Datentyp wir es haben wollen, steht dann in den spitzen Klammern? (hui ich hoffe das war jetzt nicht zu kompliziert ausgedrückt.. )
Aber wieso T? Wieso nicht gleich den Datentyp hineingeben, wie z.b. Long, Integer, String, Double etc?


Bsp hier:
Code:
public class Pocket<T>
{
  private T value;
  public Pocket() {}
  public Pocket( T value ) { this.value = value; }
  public void set( T value ) { this.value = value; }
  public T get() { return value; }
  public boolean isEmpty() { return value != null; }
  public void empty() { value = null; }
}
quelle: http://openbook.rheinwerk-verlag.de...tml#dodtp1e5aa8bf-acb7-4f0f-b3cf-176e06f73845



Oh okay...eine Zeile weiter steht wofür T, E usw steht :D
 
K

kneitzel

Gast
Bei der Implementation ist noch nicht bekannt, was für ein Typ verwendet wird. Und es kann ja viele Instanzen geben.

Also die Entwickler, die die ArrayList entwickelt haben, wissen nicht, wa rein kommt.
Und ich kann mehrere ArrayList haben. Eine ArrayList mit Mitarbeitern, eine mit KFZ, eine mit Assets des Betriebes (zu denen auch die KFZ gehören können), ....

Es ist wichtig, dass die Typen erst mit der Instanzerstellung (oder ggf erst mit einem Aufruf falls der Generic nur dort auftritt) festgelegt wird. Das macht die große Stärke der Generics aus.
 

Christopher25

Bekanntes Mitglied
Also ich versuche mal alles kompakt zu erläutern:

Klassen:
Klassen sind Baupläne für Objekte. Quasi wenn du ein Auto bauen willst, was das Auto ausmacht und kennzeichnet.

Beispiel: (Opel Astra)
Die Klasse heißt Opel Astra und ist eine Unterklasse von der Klasse Auto.
Das heißt, dass der Opel Astra zwar ein Opel Astra ist, ist aber gleichzeitig auch ein Auto.
Dementsprechend kannst du im Programm später auch einfach ein Auto in einer Methode übergeben und das kann dann z.b. auch ein Opel Corsa sein und nicht nur ein Opel Astra.

Dementsprechend gibt es auch Variablen, welche die Eigenschaften einer Klasse (dem bauplan) darstellen.
Also welche Farbe das Auto hat.
Wie viel PS und wie viele Türen das Auto besitzt.

Das Auto soll aber auch fahren können und es sollte sich an -und abschalten lassen können.
Das realisierst du in Methoden oder auch Funktionen.
Das sind dann einfach sogenannte unterprogramme, welche vom Programm ausgeführt werden.
Beispiel:

public void moveForwards(Map map, Auto auto) {
/* Auto wird auf der Map(einfach eine Beispielklasse für eine Landfläche oder sowas) 5 Meter nach vorne bewegt */
map.changePositionForwards(auto, 5);
}

In diesem Beispiel ist es völlig egal, was für ein Auto du wählst.
Es könnte ein Opel Astra oder ein Opel Corsa sein, denn diese sind beide Unterklassen von Auto.
Jetzt noch ein wichtiger Hinweiß.

Interfaces in Java definieren Verhaltensweisen welche implementiert werden sollten.
Das heißt, ein Interface sagt der Klasse inder es implementiert wird, welche Methoden mit welchen Signaturen(X1) es besitzen MUSS.

Folgendes Beispiel eines Interfaces (Name: IMove)

public void moveForwards(Map map, Vehicle vehicle);
public void moveBackwards(Map map, Vehicle vehicle);
public void moveLeft(Map map, Vehicle vehicle);
public void moveRight(Map map, Vehicle vehicle);

Ein Auto könnte dann von der Klasse Vehicle erben, was bedeutet das jedes Auto dann auch ein Vehicle ist. Und in der Klasse Vehicle könnte man nun dieses Interface mit dessen Methoden implementieren.
Da das Vehicle natürlich nicht weiß, wie es sich zu bewegen hat, weil es zu abstrakt ist, bleibt dies hier erstmal offen.
Du kannst aber die Methoden in den Unterklassen überschreiben, weil diese ja immer weitervererbt werden, solange diese nur public oder protected sind.
überschreiben = Unterklasse vergibt neues Verhalten (Neue Abfolgen von Befehlen).

Du könntest natürlich auch direkt in den Unterklassen das Interface implementieren, aber das müsstest du dann für jede Klasse machen, was ich persönlich ziemlich nervig finde, da jedes Vehicle sich sowieso bewegen kann, macht es durchaus Sinn dort das Interface zu Platzieren.

Das ganze könnte man dann natürlich auch direkt in die Klasse Vehicle reinmachen, jedoch könnte man das Interface dann z.b. wenn man dann noch eine Klasse Flugzeuge hat, welches ja kein Fahrzeug (Vehicle) ist, implementieren, was ja nicht mehr ginge, wenn man es nur für Vehicle machen würde.
Deshalb sollte man vor einem Programm immer planen was man eigentlich mit diesem Programm machen will und sich einige Dinge offen lassen und so programmieren, dass man jederzeit etwas auswechseln kann.

Ich hoffe ich konnte helfen.
 

InfectedBytes

Top Contributor
Die Signaturen deiner Interface Methoden sind allerdings nicht optimal.
Den Vehicle Parameter solltest du weglassen. Denn da ein Vehicle diese Methoden implementiert, sollten sich diese auch auf das Vehicle selbst (this) beziehen.
Java:
public void moveForwards(Map map);
public void moveBackwards(Map map);
public void moveLeft(Map map);
public void moveRight(Map map);
 

Thisor

Bekanntes Mitglied
Danke @Chrisopher25 , war ein gutes Beispiel :)
Die nächste Frage wäre:
(1) - zu welcher Methode gehört isValid? Ist das was von ArrayList oder ist das eine Methode wie z.b. length? Also das ich das überall benutzen kann?
(2)Wieso benutze ich nicht stattdessen die equals Methode mit add?
 

Joose

Top Contributor
(1) - zu welcher Methode gehört isValid? Ist das was von ArrayList oder ist das eine Methode wie z.b. length? Also das ich das überall benutzen kann?

Was ist "isValid"? Hört sich für mich nach einer Methode an und eine Methode gehört zu einer Klasse.
Sofern du ein Objekt einer Klasse hast kannst du alle public Methode dieser Klasse aufrufen (und Kontextabhängig noch protected Methoden).

(2)Wieso benutze ich nicht stattdessen die equals Methode mit add?

Welche Methoden man verwendet kommt ganz darauf an was man erreichen will.
 
K

kneitzel

Gast
Also Klassen haben immer genau die Funktionen, die sie entweder selbst implementieren oder die diese geerbt haben. Es gibt da keine Funktionen, die da "einfach so immer" da sind.

Da alles von Object erbt, sind die Funktionen von Object natürlich in jeder Klasse, also Funktionen wie toString und equals.

Aber es gibt einige typische Funktionen, die man immer wieder antrifft. Das liegt einfach daran, dass oft ähnliche Funktionen vorhanden sind und gleiche Namen es stark vereinfachen, sich die Funktionen und deren Namen zu merken.

Aber generell ist dann wichtig, dass man sich die Dokumentation zu einer Klasse anschaut. Das Java Framework ist gut dokumentiert und beschreibt, welche Funktionen implementiert wurden. Und es zeigt auf, welche Funktionen von welcher Klasse geerbt wurden.

Konrad
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
W Objekte erzeugen Httprequest oder Httpclient Java Basics - Anfänger-Themen 3
richis-fragen Kann Arrays.stream() auch auf Objekte angewant werden? Java Basics - Anfänger-Themen 10
krgewb Über Objekt, das Objekte desselben Typs enthält iterieren Java Basics - Anfänger-Themen 5
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4
G Objekte in Methoden? Java Basics - Anfänger-Themen 13
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
I Objekte Hilfe Java Basics - Anfänger-Themen 8
G Klassen und Objekte Java Basics - Anfänger-Themen 2
W Verschachtelte Objekte wieder auspacken Java Basics - Anfänger-Themen 3
R Attribute mehrerer Objekte ausgeben Java Basics - Anfänger-Themen 3
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
O ObjectOutputStream Anzahl Objekte festhalten Java Basics - Anfänger-Themen 17
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
J Best Practice Dateiinhalte validieren und auf Objekte mappen Java Basics - Anfänger-Themen 3
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
E Methode mit Parametern um Objekte zu übergeben Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
A Objekte verknüpfen Java Basics - Anfänger-Themen 2
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
M Klassen und Objekte Java Basics - Anfänger-Themen 2
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Array Objekte einer Klasse zuordnen Java Basics - Anfänger-Themen 15
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
Orkanson Objekte in ein Array einfügen Java Basics - Anfänger-Themen 5
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
Orkanson Objekte und Klassen Java Basics - Anfänger-Themen 8
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Objekte-Fragen Java Basics - Anfänger-Themen 1
T Objekte in der Methode Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben