Programmieren in Java - Assoziation, Komposition und ArrayList

in programmieren •  6 years ago  (edited)



Bild Referenz: https://commons.wikimedia.org/wiki/File:AHEADComposition.jpg

Intro

    Hallo, ich bin's @drifter2! Der heutige Artikel ist an meinem englischen Artikel "Java Composition and ArrayList" basiert, dem wir heute zu Deutsch übersetzen werden und zusätzlich auch "optimieren" werden. Das bedeutet das wir über die Assoziation und Komposition von Klassen/Objekten reden werden, und zusätzlich noch das Objekt "ArrayList" erwähnen und verwenden werden. Also, fangen wir dann mal direkt an!


Assoziation

    Eine Assoziation passiert zwischen zwei unabhängigen Objekten, wenn man mit denen zusammen ein gemeinsames Zeil erreichen will. Nachdem das Ziel erreicht wurde, können diese wieder unabhängig voneinander fortbestehen. Das alles bedeutet also das man das andere Objekt nur "benutzt". Keines der zwei Objekte ist ein Bestandteil vom anderen. Das ist z. B. was wir beim Beispielprogramm vom vorherigen Artikel verwendet haben. Dort wurde der Student in der Treiber-Klasse (Driver) nur benutzt/verwendet, und war natürlich kein Bestandteil der Klasse.

Komposition

    Die Komposition ist eine viel strengere Beziehung zwischen Objekten. Bei dieser Beziehung "enthält" ein Ganzes-Objekt ein Teil-Objekt. Die selbständige Existenz dieses Teil-Objekts macht aber keinen Sinn. Man kann diese Beziehung sehr leicht mit "hat ein/e" oder "besteht aus" beschreiben (vom Englischen has-a). Ein Mensch hat z. B. 2 Beine und 2 Hände. Das bedeutet das die Beine und Hände eine Kompositions-Beziehung mit dem Menschen haben, das dieser aus denen besteht. Etwas sehr ähnliches ist die so genannte Aggregation. Bei dieser besteht ein Objekt aus einem anderen, aber dieses andere kann auch selbstständig existieren. Also ob es sich um eine Komposition oder Aggregation handelt, bestimmt das "Teil-Objekt", und ob es selbständig existieren kann oder nicht.

ArrayList

    Eine ArrayList ist ein Objekt der "java.util" Bibliothek von Java, welches sehr oft für die Erstellung Dynamischer Felder-Arrays oder Listen verwendet wird. Im Gegensatz zu der "normalen" LinkedList, ist eine ArrayList deutlich schneller beim Zugriff einzelner Elemente. Von der Sprache C wissen wir das die meisten Programmiersprachen nur statische Felder zulassen. Um eine Feld dynamisch zu machen mussten wir ja Speicher dynamisch zuweisen mit Hilfe von malloc() und realloc(). Java enthält aber keine solchen "einfachen" Befehle, welches heißt das wir eine Liste verwenden. Das gute bei der ArrayList ist aber das diese mit Hilfe von den Funktionen/Methoden des Objekts, sehr ähnlich zu einem Feld benutzbar ist.
    Um noch spezifischer zu werden, müssen wir das eigentliche Objekt der Bibliothek importieren, etwas das wie folgend geht:
import java.util.ArrayList;

Ein Objekt kann sehr leicht erstellt werden, mit der Linie:
ArrayList<Datentyp> ListName = new ArrayList<DatenTyp>();

    Die vordefinierten Funktionen/Methoden des Objekts, die sehr von Nützen sind, sind:
  • ListName.add(v), welches das Objekt 'v' in der Liste einfügt
  • ListName.add(i, v), welches das Objekt 'v' im Index 'i' der Liste einfügt
  • ListName.get(i), welches das Objekt im Index 'i' zurückgibt
  • ListName.set(i, v), welches das Objekt im Index 'i' zu dem Objekt 'v' ändert
  • ListName.remove(i), welches das Objekt im Index 'i' entfernt
  • ListName.remove(v), welches das Objekt 'v' von der Liste entfernt
  • ListName.size(), welches die Größe der Liste oder, besser gesagt, Anzahl an Elementen der Liste zurückgibt
    Es gibt viele weitere Methoden, welche prüfen ob ein Objekt enthalten ist (contains), welchen Index ein gewisses Objekt hat (indexOf), welche die Liste sortieren (sort) oder sogar löschen (clear). Das nützlichste bei Listen ist der so genannte List-Iterator, der zusätzliche Methoden zum durchlaufen und so für die Verarbeitung der Liste bietet.
    Bei einem IDE kann man all diese Methoden sehr leicht mit Hilfe vom '.' sehen, da dann eine Liste aller Funktionen und Daten eines Objekts rauskommt. Bei Java-Bibliotheken wird meistens eine Beschreibung dabei sein, welche erklärt was jedes Objekt, jede Funktion und jede Datei macht.

Beispielprogramm

    Sagen wir mal wir wollen ein Programm erstellen mit Studenten die zusätzlich aus einen Kursen-Feld bestehen. Jeder Student hat eine ID, einen Namen und eine Nachnamen und zusätzlich dieses dynamische ArrayList-Feld. Jeder Kurs hat eine ID, einen Namen und eine Note. Die Treiber-Klasse wird eine ArrayList von Studenten erstellen und einen Student und 2 Kurse in seinem Kursen-Feld hinzufügen. Zuletzt werden wir all diese Information ausdrucken. Für diese Objekte werden wir Konstruktoren und die toString() Methode implementieren. Die Variablen werden aber "Standard" (default) bleiben und nicht privat (private), welches heißt das wir keine Getters und Setters brauchen.

Kurs-Klasse:

public class Kurs{ // Kurs.java
    int id;
    String name;
    double note;
    // überladener Konstruktor
    public Kurs(int id, String name, double note) { 
        this.id = id;
        this.name = name;
        this.note= note;
    }
    @Override
     public String toString() {
        return id + " " + name + " " + note;
    }
}

Student-Klasse:

import java.util.ArrayList; // ArrayList Bibliothek
public class Student { // Student.java
    int id;
    String name;
    String nachname;
    // ein Student hat eine Kurs-ArrayList (Komposition-Aggregation)
    ArrayList kurse = new ArrayList();
    // pseudo-überladener Konstruktor (keine ArrayList)
    public Student(int id, String name, String nachname) { 
        this.id = id;
        this.name = name;
        this.nachname= nachname;
    }
    @Override
    public String toString() {
        String temp = "";// temporärer String
        temp += id + " ";
        temp += name + " ";
        temp += nachname+ "\n";
        // alle Kurse hinzufügen mit For-Schleife von der Größe der Liste
        for (int i = 0; i < kurse.size() - 1; i++) {
            temp += kurse.get(i) + "\n";
        }
        temp += kurse.get(kurse.size() - 1);
        return temp;
    }
}

TestStudent-Klasse (Driver):

import java.util.ArrayList;
public class TestStudent { // TestStudent.java
    public static void main(String[] args) {
        // ArrayList von Studenten
        ArrayList studenten = new ArrayList<>(); 
        // Neuen Student hinzufügen...
        studenten.add(new Student(569, "Nick", "Peterson"));
        // ...mit zwei Kursen
        studenten.get(0).kurse.add(new Kurs(669, "Physik", 7.5));
        studenten.get(0).kurse.add(new Kurs(665, "Chemie", 9));
        // Alle Studenten ausdrucken (wir haben hier nur einen)
        for (int i = 0; i < studenten.size(); i++) { 
            System.out.println(studenten.get(i));
        }
    }
}

Beim ausführen wird dann folgendes ausgedruckt:
569 Nick Peterson
669 Physik 7.5
665 Chemie 9

Referenzen:

  1. https://www.teialehrbuch.de/Kostenlose-Kurse/JAVA/6592-Assoziation-und-Komposition.html
  2. https://www.informatikzentrale.de/java-arraylist.html
  3. https://steemit.com/programming/@drifter1/programming-java-composition-and-arraylist
    Der Artikel ist zu 90% eine Übersetzung von meinen englischen Artikel, aber enthält ein paar zusätzliche Informationen. Die Referenzen haben dabei geholfen die richtigen deutschen Begriffe zu finden und zu verwenden, da ich Programmieren nicht in Deutsch, sondern in Englisch gelernt habe.

Vorherige Artikel

  • Von C nach Java -> Ähnlichkeiten mit C, OOP, Ein- und Ausgabe über die Konsole, Array-Feld Objekt, C-like Beispielprogramm
  • Klassen und Methoden -> Klassen-Aufbau, Main Klasse, Objekt Klassen und Konstruktoren, Getters und Setters, toString(), Methoden generell, Komplettes Beispielprogramm

Schlusswort

    Und das war's dann auch mit dem heutigen Artikel und ich hoffe euch hat dieser Artikel gefallen! Beim nächsten Artikel werden wir über die so genannte Vererbung (Inheritance) zwischen Klassen reden.

Keep on drifting! ;)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hello! Your post has been resteemed and upvoted by @ilovecoding because we love coding! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!

Reply !stop to disable the comment. Thanks!