5 Theoriefragen

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Ich habe ein paar eher theoretische Fragen und hoffen, ihr könnt sie alle beantworten:

1. Sobald eine Klasse auch nur eine abstrakte Methode beinhaltet, kann ich kein Objekt von ihr direkt anlegen, richtig?

2. Falls "ja" die Antwort auf Erstens ist: Abstrakte Klassen (Klassen mit abstrakten Methoden) wären dann auf UML-Klassendiagramme übertragen eigentlich auch nur Interfaces, oder?

3. Stehen für (Java-)Interfaces die gleichen Möglichkeiten wie für Klassen zur Verfügung? Also können Interfaces Attribute haben, können diese Attribute (und Methoden) auch static sein?

4. Verschachtelte Klassen (InnerClasses): Können die nur Innerhalb von anderen Klassen definiert werde oder könnte ich die theoretisch auch innerhalb einer Methode einer Klasse definieren?

5. Ich habe von anonymous-Classes gelesen, also unbenannte Klassen? Wo und wie verwendet man die? Kann jemand bitte ein kurzes Codebeispiel schicken?
 

Wildcard

Top Contributor
1. richtig
2. falsch
3. Attribute können nur static sein, Methoden können nur public abstract.
4. ja
5. Bei Listenern zum Beispiel
Code:
button.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
   {

   }
});
 

Evolver

Bekanntes Mitglied
Hmm, wie soll ich dass denn sonst darstellen? UML kennt doch kein abstract und irgendwie müsste ja im Klassendiagramm deutlich werden, dass von dieser (gedachten abstrakten) Klasse keine Instanzen existieren können.
 

Evolver

Bekanntes Mitglied
OK, das mit den abstrakten Klassen ist noch nicht ganz ausgestanden. Laut Wiki füge ich 'abstract' der Klasse einfach als Eigenschaftswert hinzu. Damit kann ich leben. Nun folgende Fragen:

6. Darf ich mit diesem Eigenschaftswert in der UML auch Methoden kennzeichnen?

7. Wenn ich eine ganze (Java-)Klasse als abstract kennzeichne, darf ich dann keine ihrer Methoden implementieren? Oder kann ich beliebig Methoden implementieren und nur die nicht, die ihrerseits auch wieder als abstract gekennzeichnet sind?

8. Wenn ich in einer (Java-)Klasse eine abstrakte Methode habe, würde es dann Sinn machen, im Klassendiagramm die ganze Klasse als 'abstract' zu kennzeichnen? Schließlich ist der Effekt wieder, dass ich keine Instanzen dieser Klasse direkt erzeugen kann.
 
G

Guest

Gast
6. Keine Ahnung

7. Andersrum. Du musst abstrakte Methoden implementieren. Alle anderen, die nicht als final deklariert sind, kannst du ebenfalls überschreiben. Ausnahme sind private Mehoden.

8. Wenn eine Klasse mindestens eine abstrakte Methode hat, ist sie ebenfalls abstrakt.
 

kleiner_held

Top Contributor
6. Generell ist zu sagen, dass UML eine allgmeine Modellierungssprache für objektorientierte Systeme/Sprachen ist und nicht direkt Java-spezifisch. Man darf sich also nicht wundern, wenn nicht alle Details der Java Spezifikation abgebildet werden. Zu deiner Frage: Auch Operationen dürfen Eigenschaften haben, also z.B:
+formatText(text: String):String{abstract}
solch eine Kennzeichnug ist aber mMn optional

7. Du kannst in Java in einer abstrakten Klasse beliebige Methoden implementieren. Methoden die nicht implementiert sind benötigen das Schlüsselwort abstract.

8. In Java dürfen nur abstrakte Klassen auch abstrakte Methoden beinhalten. Entsprechend solltest Du das im Klassendiagramm darstellen.
 

Evolver

Bekanntes Mitglied
Erstmal Danke bis hierhin, viele Unklarheiten sind schon beseitigt, ein paar neue sind dazu gekommen. Also weiter gehts:

9.a) Gibt es ein UML-Äquivalent zu dem Schlüsselwort 'synchronized' (für Klassen und Methoden)?
9.b) Gibt es UML-Äquivalente zu den Schlüsselwörtern 'transient' und 'volatile' für Variablen? Ich hatte nur kurz von ihnen geleses, wendet man sie überhaupt bei Membervariablen von Klassen an oder nur be temporären Variablen (z.B. innerhalb einer Methode)?
9.c) Exitiert 'final' als Eigenschaftswert in der UML?

10. Können Interfaces einen Vererbungsbaum bilden? Also kann ich z.B. InterfaceB von InterfaceA ableiten?

11. Falls ein Interface von einem anderen erben kann, kann ich dann auch 'final' verwenden, um anzugeben, dass das entsprechende Interface ein Blatt im Vererbungsbaum ist? Irgendwie ist die Frage blöd formuliert.
 
S

SlaterB

Gast
10. kannst du selber testen? ja

11. denke ich nicht, macht auch keinen Sinn, da es im Gebrauch letztlich keinen Unterschied macht, ob du mit einem Interface oder einer Klasse hantierst,
und mindestens einer Klasse überschreibt ja das Interface..

oder meinst du UML-Darstellungen?
 

Evolver

Bekanntes Mitglied
zu 10.: Ja ich habe es nun probiert und Interfaces können von anderen Interfaces erben.
zu 11.: 'final' gibt es nicht für Interfaces.

Bleibt noch Frage 9 offen. Und eine neue habe ich:

12. Ich habe festgestellt, dass ich für Interfaces den Modifier 'abstract' explizit angeben kann. Was macht das für einen Sinn? Ist ein Interface nicht grundsätzlich abstrakt? Ist das so wie bei Attributen von Interfaces, die grundsätzlich 'static final' sind - wobei ich trotzdem explizit hinschreien kann, dass sie es sind?
 

mic_checker

Top Contributor
Ganz einfach, die Angabe ist überflüssig.

Wenn du dir nicht sicher bist, welche Angaben benötigt werden und welche nicht, kannst du dich durch andere Tools unterstützen lassen.

Ich hab bei mir im Eclipse u.a. Checkstyle eingebunden, das würde mir auf die Finger hauen wenn ich in einem Interface Mthoden als public und/oder abstract kennzeichne.
Darüber hinaus gibts auch noch einige weitere nette Sachen die man damit machen kann.
 

Evolver

Bekanntes Mitglied
@mic_checker:
Danke für den Hinweise, aber das nützt mir nicht viel. Ich muss ein Reverse-Engineering-Tool für Java-Quellcode schreiben, deswegen muss ich zum einem alle möglichen Sprachkonstrukte bearbeiten können, zum anderen deren Sinn oder Unsinn selbst erkennen und entsprechend umsetzen.
 

Leroy42

Top Contributor
Evolver hat gesagt.:
Ich muss ein Reverse-Engineering-Tool für Java-Quellcode schreiben, deswegen muss ich zum einem alle möglichen Sprachkonstrukte bearbeiten können, zum anderen deren Sinn oder Unsinn selbst erkennen und entsprechend umsetzen.

:shock: Na dann viel Vergnügen! :cool:

Für solch' hochgesteckte Ziele kommst du wohl nicht
darum herum, die JLS zu lesen und zu verstehen.
 

mic_checker

Top Contributor
Was genau musst du denn alles erkennen? Könntest ja evtl. Elemente aus den AST's nutzen für diverse Überprüfungen, z.B. wenn du erkennen willst ob eine Variable deklariert aber nicht verwendet wurde etc.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben