Datentypen Eigene Datentypen

ThiageX

Mitglied
Hallo zusammen,

ich habe folgendes Verständnisproblem. Ich verstehe nicht, weshalb der Datentypen Autor genommen wird. Ist das eine Klasse bzw. Datentypen der selbst erstellt wurde? Zeige euch am besten mal den Code dazu. Normalerweise würde man doch den Datentyp String für das Attribut autor nehmen. Kann das jemand anhand eines konkreten Beispiels an Autor erklären?

public Class Sachbuch extends Artikel {
private Autor autor;
public Autor getAutor() {
return autor;

public void setAutor (Autor autor) {
this.autor = autor;
}
}
 

LimDul

Top Contributor
Die wird selbst erstellt sein.

Ein String ist für sowas in der Regel keine gute Idee. Wie willst du vergleichen, ob zwei Bücher vom selben Autor geschrieben sind? Es könnte manche Namen mehrfach geben. Wie soll der Autor im String gespeichert werden? "Vorname Nachname" oder "Nachname, Vorname" Was davon ist sinnvoller? (Stichwörter dazu: Anzeige, Sortierung). Aus einem String kann man auch Vor- und Nachname nicht sauber trennen.

Vielleicht will man auch mehr Daten als den Namen zu einem Autor speichern - wie z.B. das Geburtsdatum.

Deswegen ist es sehr oft eine gute Idee einen eigenen Datentyp anzulegen, anstelle nur "String" oder ähnliches zu nutzen Im Detail muss man natürlich schauen - Vorname z.B. ist meist nicht sinnvoll als eigener Datentyp, weil dies nun wirklich ein einfacher String ist.
 

White_Fox

Top Contributor
Bitte benutze Codetags für Code (auf das </> klicken).

Ja, Autor ist eine selbsterstellte Klasse. Es ist normalerweise nicht gut, etwas, das eigentlich ein komplexeres Objekt ist, möglichst in einen einfachen Datentyp zu pressen - auch wenn man zunächst meint, man braucht nicht mehr.

Z.B. hast du jetzt Vorname und Nachname und wie LimDul schon sagte, kannst du beides in einem String nur schlecht auseinanderhalten. Z.B. "Mimi von Mirbach" oder "Jaques de Chapeaurouge". Das kriegst du nicht auf einfachem Wege automatisch getrennt oder formatiert (von Mirbach, Mimi), dafür ist die Wahrscheinlichkeit sehr hoch das dir das um die Ohren fliegt, weil du Namen eingeben willst die du übersehen hast.
Z.B. Alina Tscherenkova - in diesem Namen ist gar kein Nachname enthalten, da Russen nämlich drei Namen - Vorname, Vatersname, Nachname - haben und die offizielle Anrede Vorname Vatersname ist, wobei der Vatersname aus dem Vornamen des Vaters und meistens der Endung -ova (bei Frauen) oder -itsch (bei Männern) gebildet wird.

Nehmen wir mal an, daß du den Namen des Autors einfach in einen String gepackt hast. An Namen wie Pierre du Bredouille oder Alexandr Dimitrowitsch hast du dabei nicht gedacht. Dann hast du, sobald du auf den Namen zugreifen mußt, richtig ernsthaft zu tun. Dinge wie Sortierung oder Formatierung arten in richtig häßliche Arbeit aus und es wird sicherlich immer mal Fehler machen.

Mit der Klasse Autor kannst du dieses Problem zumindest in dieser Klasse vom Rest des Programms isolieren. Autor stellt z.B. eine Methode getName() bereit. Die Arbeit, den Namen zurechtzuformatieren, hast du dann zwar immer noch - aber eben nur an einer Stelle in einer Klasse.

Besser wäre aber sicherlich so eine Lösung:
Java:
public class Autor{
    private Name name;

    public Autor(Name name){
        this.name = name;
    }

    public String officialAddress(){
        return name.officialName();
    }
}


abstract public class Name {
    abstract String officialName();
}

public class EuropeanName extends Name {
    private String forname;
    private String surname;
    
    public EuropeanName(String forname, String surname){
        this.forname = forname;
        this.surname = surname;
    }
        
    @Override
    String officialName(){
        return forname + " " + surname;
    }
}

public class RussianName extends Name{
    private String forname;
    private String patronymic;
    private String surname;
    
    public RussianName(String forname, String patronymic, String surname){
        this.forname = forname;
        this.patronymic = patronymic;
        this.surname = surname;
    }
    
    @Override
    String officialName(){
        return forname + " " + patronymic;
    }
}

Damit kannst du jede erdenkliche Namenskonvention erschlagen. Araber machen das ganze nochmal anders? Und du hast keine Ahnung wie? Das kann dir gerade völlig egal sein, das Problem kannst du dann lösen wenn du es brauchst. Einfach eine neue Klasse von Name ableiten, fertig. Notfalls kannst du auch biblische Geschlechtsregister hinterlegen, wenn es sein muß.

Oder noch ganz was anderes wichtiges: Überleg dir mal, wie du z.B. Titel oder andere Namenszusätze einbauen würdest. Autoren sind ja durchaus auch eitel und bestehen auf vollständige Anrede mit Prof. Dr. Dr. k. annjanix. Das geht jetzt eigentlich ziemlich einfach, und vor allem: Der Rest deines Programms bekommt von so einer Änderung gar nichts mit. Da wird ja gefälligst nur das gefressen, was von der Methode officialName() serviert wird - egal was es ist.
 
K

kneitzel

Gast
Auch eine ref führt irgendwann zu einer Klasse
Nein, lies es doch einfach nach! Die Kapitel der JLS habe ich doch benannt.

Und das, was wichtig ist, habe ich auch geschrieben. Ein Array ist in Java / der JVM keine Klasse.

Es ist ja in Ordnung, wenn Du irgendwelchen ungenauen Kram postest (weil Du es nicht besser weißt), aber bei so Verbesserungen immer wieder auf etwas Falschem zu beharren ist einfach extrem dumm.
 
K

kneitzel

Gast
Vielleicht an der Stelle noch einmal alles etwas deutlicher - vielleicht kommen wir dann auch auf das, was Du eigentlich meintest.

a) Aufteilung von Typen / Werten:
Es teilt sich erst einmal auf in Primitive Typen und Referenz Typen (JLS 4.1):
Und wie schon geschrieben werden Reference Types weiter aufgeteilt in eben (JLS 4.3):

Da kann man dann also erst einmal erkennen, dass eine deutliche Trennung stattfindet in der JLS und diese Unterteilung ist durchaus wichtig.

b) "keine primitiven Datentypen sind sind Klassen." und "Auch eine ref führt irgendwann zu einer Klasse"

Das sind in einen Augen Aussagen, die mir zumindest Bauchschmerzen bereiten. Aber man kann da zumindest viele Parallelen finden:
- Neue Instanzen können mit new erzeugt werden. (Was aber nicht zwingend ist, siehe 10.6)
- Ich kann mit getClass() eine Class Instanz bekommen.

Damit kann man sich ggf. tatsächlich auf einen Punkt zurück ziehen, der vereinfacht sagt "Auch eine ref führt irgendwann zu einer Klasse".
(Bei der null Reference sehe ich das problematisch, denn den null Type finde ich nur in der JLS - aber da werde ich keine class Instanz zu finden fürchte ich).

Aber die Unterschiede liegen auf der Hand, z.B. im Bereich der Namensgebung ("[I" ist kein gültiger Bezeichner nach JLS 3.8) und in der Dokumentation des Frameworks, das ja die Klassen dokumentiert, tauchen diese auch nicht auf (gehören ja zu java.lang). Statt dessen findet sich Kapitel 10 in der JLS, die Arrays im Detail beschreiben.

Ich selbst sehe so Aussagen als schwammig und problematisch an.
 

Jw456

Top Contributor
Ich denke auch das sich @kneitzel meistens zusehr reinsteigert und zuwenig die Sicht als Anfänger sieht.
Arrays sind aber doch auch für Anfänger interessant und die würde ich halt - wie ausgeführt - da durchaus getrennt betrachten.

Das hat keiner behauptet und auch nicht abgestritten.

Ich denke auch das sich @kneitzel manchmal zusehr reinsteigert und zuwenig die Sicht als Anfänger sieht.
Dem TE wird es nicht bis ins letzte bit interessieren.
 
K

kneitzel

Gast
Ich steigere mich nicht rein - ich finde nur eben diese schwammigen Aussagen (oder teilweise falsche Aussagen wie sie in anderen Threads getätigt wurden) falsch. Du studierst doch. Was meinst Du, wie so etwas in einer wissenschaftlichen Arbeit bewertet werden würde?

Mir ist das alles prinzipiell egal. Nur wenn etwas korrigiert werden sollte, dann korrigiere ich etwas. Versuche dabei sogar entsprechend auf Quellen hin zu weisen.

Und auch Anfängern sollte man schlicht nichts falsches sagen ...
 

Jw456

Top Contributor
Ich studiere nicht. Ist für mich Jahrzehnte Hobby und vorallen für eine Anfänger ist es nicht immer sofort wichtig es ins letzte bit zu wissen.
 
K

kneitzel

Gast
Ich studiere nicht. Ist für mich Jahrzehnte Hobby und vorallen für eine Anfänger ist es nicht immer sofort wichtig es ins letzte bit zu wissen.
Ich habe nie behauptet, dass es wichtig ist für einen Anfänger. Nur wenn ich einer Aussage widerspreche, dann bringe ich auch Argumente / Belege für meine Position. Und das habe ich schlicht gemacht. So kann sich jeder für sich überlegen, was ihn im Detail interessiert oder eben nicht. Ein Anfänger kann also die reine Aussage für sich nehmen (Und dann kann er hier durchaus mitnehmen, dass Arrays ggf. doch etwas anders zu behandeln sind als Instanzen anderer Klassen.)
 

ChippoS

Mitglied
Kurze Rückmeldung als Anfänger, der gerade die Variablen und Arrays "lernt": Auch wir Anfänger sind unterschiedlich und lernen unterschiedlich. Ich persönlich befürworte, es "bis ins letzte Bit zu wissen", andere lernen besser, wenn sie anfangs weniger Informationen haben. Es ist Eure (Profi-) Mischung hier, die es allen Anfängern ermöglicht daraus, davon zu lernen. Ich würde mich daher freuen, wenn Ihr es genauso weiter macht, lasst die verschiedenen Herangehensweisen doch alle in einem Beitrag, dann ist für jeden Anfänger das "Passende" dabei. Und an dieser Stelle nämlich wieder einmal: Danke für Euer mit-geteiltes Wissen! Mit hilft es sehr.
 

mihe7

Top Contributor
Ach, das läuft hier eigentlich immer so. Jemand stellt eine Frage, die beantwortet wird. Da man oft den Kenntnisstand nicht kennt oder sich jemand als Anfänger zu erkennen gibt, versucht man es möglichst einfach zu beschreiben. Der Einfachheit oder auch einem zeitlichen Mangel geschuldet sind dann Ungenauigkeiten oder Unvollständigkeiten, die von anderen im Nachgang ergänzt werden. Das führt dann z. T. in ausufernde Diskussionen (und teilweise in den Blödsinn :)), am Ende haben sich fast alle wieder lieb und sofern man vom Thema abgekommen ist, kommt man auf dieses wieder zurück.

der gerade die Variablen und Arrays "lernt": Auch wir Anfänger sind unterschiedlich und lernen unterschiedlich. Ich persönlich befürworte, es "bis ins letzte Bit zu wissen"
Wenn Du gerade dabei bist: https://www.java-forum.org/thema/von-datentypen-und-mehrdimensionalen-arrays.189506/
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
SebSnake Operatoren für eigene Datentypen Java Basics - Anfänger-Themen 3
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3
W GUI als eigene Klasse oder in die Startklasse? Java Basics - Anfänger-Themen 21
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
M Datentypen Eigene iterierbare Liste Java Basics - Anfänger-Themen 4
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
S Klassendiagramm - nur eigene Klassen? Java Basics - Anfänger-Themen 3
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
C Eigene Interpreter-Programmiersprache mit Java Java Basics - Anfänger-Themen 17
B eigene Exception.... Java Basics - Anfänger-Themen 5
N Java Programm soll Datei in eigene jar schreiben Java Basics - Anfänger-Themen 13
F Eigene Exception StackTrace und Message ist leer warum??? Java Basics - Anfänger-Themen 3
M Eigene Pakete in Eclipse erstellen Java Basics - Anfänger-Themen 5
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
H eigene Schriftarten registrieren Java Basics - Anfänger-Themen 5
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
M Eigene LinkedList und Nodes Java Basics - Anfänger-Themen 20
S eigene Methoden in JDialog Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben