Hagen_1618_01 Flashcards

1
Q

In welche Gruppen können die Ausnahmesituationen („Exceptions“), die in einem Programm im Allgemeinen auftreten können, eingeordnet werden?

A
  1. Ausnahmesituationen, die auf eine unvorsichtige Implementierungsarbeit hindeuten und die durch angemessene Überprüfungen vermieden werden können. Klassen, die diese Gruppe von Ausnahmen beschreiben, sind Subklassen von RuntimeException
  2. Ausnahmesituationen, die nicht vorhergesehen und nicht ausgeschlossen werden können, die aber zur Laufzeit mit hoher Wahrscheinlichkeit auftreten können und gegen die die Anwendung daher robust sein sollte; wie z.B. beim Netzwerk- / Datei-Zugriff oder Verwendung von Benutzereingaben. Klassen, die diese Gruppe von Ausnahmen beschreiben sind Subklassen von Exception oder Subtypen von Throwable, jedoch nicht von RuntimeException oder Error.
  3. Ausnahmesituationen, die nicht vorhergesehen werden können, auf die das Programm selber jedoch auch keine Einflussmöglichkeit hat. Situationen dieser Art stehen in keinem Zusammenhang mit einer konkreten Methode, sondern können an beliebigen Programmstellen unvermittelt auftreten. Klassen, die diese Gruppe von Ausnahmen beschreiben, sind Subtypen von Error.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Nennen Sie 2 Ihnen bekannte Ausnahmetypen aus der Java-Standardbibliothek, die aus verschiedenen der oben genannten Gruppen stammen, und ordnen Sie sie zu.

A
  • NullPointerException (1) Durch defensives Programmieren kann diese Ausnahme vermieden werden.
  • NumberFormatException (1) An den Stellen, an denen eine Zeichenkette in eine Zahl gewandelt werden soll, kann durch eine syntaktische Prüfung zuvor sichergestellt werden, dass die Konvertierung tatsächlich durchgeführt werden kann.
  • FileNotFoundException (2) Da auch andere Programme Zugriff auf das Dateisystem haben, kann nicht ausgeschlossen werden, dass Dateien verändert oder gar gelöscht werden, nachdem sich das Programm ihrer Existenz vergewissert hat. Wann immer Dateien geladen werden sollen (deren Pfad z.B. aus einer Konfigurationsdatei gelesen wird), muss damit gerechnet werden, dass die Datei nicht mehr gefunden werden kann.
  • IOException (2) (z.B. bei Netzwerkkommunikation) Findet ein Nachrichtenaustausch zwischen verschiedenen Rechnern statt, muss damit gerechnet werden, dass die Verbindung aufgrund eines Netzwerkproblems gestört wird.
  • OutOfMemoryError (3) Während der Programmausführung wird weiterer Speicher benötigt, der aber nicht zur Verfügung gestellt werden kann. Der zur Verfügung stehende Speicher wird durch den Benutzer beim Start der Anwendung beschränkt und kann durch das Programm selber nicht geändert werden.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Welche vier Arten von Polymorphie kennen Sie?

A
  • Subtyp-Polymorphie
  • parametrische Polymorphie
  • beschränkt parametrische Polymorphie (hierbei handelt es sich um eine spezielle Form der parametrischen Polymorphie)
  • Ad-hoc Poly-morphie
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist Subtyp-Polymorphie?

A

Subtyp-Polymorphie wird durch Subtyping erreicht. Das bedeutet, dass an den Stellen, an denen ein Objekt vom Typ Typ erwartet wird, auch Objekte beliebiger Typen Subtyp stehen dürfen, sofern diese Subtypen von Typ sind.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist Parametrische Polymorphie?

A

Parametrische Polymorphie wird dadurch realisiert, dass bestimmte Konstrukte einer Programmiersprache – z.B. Methoden oder Klassen – durch Typparameter parametrisiert werden. Bei der Verwendung eines so parametrisierten Konstrukts wird der Typparameter durch einen konkreten Typen ersetzt. So ist es möglich, eine generische Implementierung einer Funktionalität anzugeben, die in verschiedenen Kontexten typsicher genutzt werden kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist beschränkt parametrische Polymorphie?

A

Die beschränkt parametrische Polymorphie begegnet dem Problem der (einfachen) parametrischen Polymorphie, dass innerhalb der generischen Klasse keine Informationen über den Typen, mit dem der Typparameter belegt wird, zur Verfügung stehen. Hierin können so ohne eine explizite Typkonvertierung (Type Casts) keine spezifischen Methoden verwendet werden.

Durch die Angabe einer Schranke zu dem Typparameter kann nun hingegen festgelegt werden, dass dieser lediglich durch Subtypen der Schranke belegt werden kann. So kann auch ohne Typkonvertierung (Type Cast) innerhalb der generischen Implementierung auf die durch die Schranke deklarierte Schnittstelle zugegriffen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Was ist Ad-hoc Polymorphie?

A

Als Ad-hoc Polymorphie wird das Überladen von Operatoren bzw. Methodennamen bezeichnet. Für identifizierte Operationen können so für unterschiedliche Argumenttypen jeweils optimierte Implementierungen angegeben werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Welche Kommunikationsarten von Prozessen kennen Sie? Was zeichnet sie jeweils aus?

A

Eine synchrone Kommunikation zweier Prozesse kann nur dann stattfinden, wenn beide Prozesse zueinander passende Programmstellen erreicht haben. Gegebenenfalls muss der eine Prozess zunächst auf den anderen warten.

Bei asynchroner Kommunikation führen die Prozesse die Aktionen zur Kommunikation aus und arbeiten danach weiter, ohne auf eine Antwort zu warten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Nennen Sie vier Kommunikationsmittel und ordnen Sie sie den Kommunikationsarten von oben zu.

A

Kommunikationsmittel zur asynchronen Kommunikation:

  • Kommunikation über gemeinsamen Speicher
  • Kommunikation über Nachrichten

Kommunikationsmittel zur synchronen Kommunikation:

  • Entfernter Prozedur- bzw. Methodenaufruf
  • Spezielle Kommunikationskonstrukte (z.B. Entries in der Sprache Ada)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

In welchem Kontext werden anonyme Klassen in Java häufig verwendet? Warum eignen sie sich hier besonders gut?

A

Anonyme Klassen werden oft im Rahmen der Entwicklung von grafischen Benutzeroberflächen verwendet, z.B. um Beobachter-Objekte an Bedienelementen zu registrieren. Hierzu eignen sie sich besonders gut, da von einem Beobachter-Objekt, welches ein spezifisches Verhalten implementiert, in der Regel nur ein einziges Objekt benötigt wird.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche Gemeinsamkeiten und welche wesentlichen Unterschiede bestehen zwischen einer lokalen und einer anonymen Klasse?

A

Sowohl lokale als auch anonyme Klassen können nur in Anweisungsblöcken, also z.B. im Rumpf einer Methode, deklariert werden. Beide sind damit auch innere Klassen, die Komponenten einer umschließenden Klasse darstellen.

Gegenüber einer anonymen Klasse hat eine „einfache“ lokale Klasse einen Namen, sodass von ihr mehrere Instanzen erzeugt werden können. Aus gleichem Grund können auch Variablen mit ihr typisiert werden, was einen Aufruf neu deklarierter Methoden von außen erlaubt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Wodurch zeichnen sich Programmgerüste aus? Nennen Sie die wesentlichen Merkmale und erläutern Sie sie anhand eines Ihnen bekannten Beispiels.

A

(Abs. 5.1) Ein Programmgerüst ist ein erweiterbares und anpassbares System von Klassen, das für einen allgemeinen, übergeordneten Aufgabenbereich eine Kernfunktionalität mit entsprechenden Bausteinen bereitstellt. Beispiel: Java AWT zur Gestaltung von Benutzeroberflächen (vgl. Abs. 5.2.2.5)

  • anpassbar“ Das AWT erlaubt die Anpassung der vordefinierten Komponenten, um z.B. die Darstellung auf dem Display des Benutzers oder das Verhalten der Komponenten anzupassen.
  • erweiterbar“ Das AWT erlaubt die Definition eigener Komponenten, die selbst bei der Implementierung verschiedener Benutzeroberflächen wiederverwendet werden können.
  • System von Klassen“ Die einzelnen Klassen des AWT sind eng miteinander gekoppelt. Um ihre eigene Aufgabe zu erledigen, müssen sie in der Regel viele Nachrichten mit Instanzen anderer Klassen austauschen, da sie von ihren Funktionalitäten abhängig sind.
  • allgemeiner, übergeordneter Aufgabenbereich“ Das AWT unterstützt die Implementierung von Benutzeroberflächen im Allgemeinen, ohne Details, z.B. zu ihrem Aufbau, festzulegen.
  • Kernfunktionalität“ Das AWT selbst bietet keine vordefinierte Benutzeroberfläche an, sondern lediglich die Bestandteile, um Elemente zu definieren, zu positionieren oder die Interaktion der Elemente festzulegen. Erst durch eine individuelle Konfiguration von Instanzen verschiedener Klassen entsteht eine darstellbare Benutzerschnittstelle.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Charakterisieren Sie jede der drei Komponente der MVC-Architektur

A

Model (Anwendungsschnittstelle): Die Schnittstelle zur Anwendung bietet Operationen an, die von dem Benutzer durch Interaktion mit der Programmoberfläche initiiert werden. Die Operationen lösen Reaktionen der Anwendungen (z.B. Berechnungen) aus und melden Zustandsänderungen an die Programmoberfläche.

View (Darstellung): Als „Darstellung“ bezeichnet man diejenigen Komponenten der Oberfläche, durch die der Benutzer die Anwendung steuert (in die er also Werte einträgt oder sie anklickt) oder informationen über ihren Zustand erhält.

Controller (Steuerung): Die Komponenten, die als „Controller“ bezeichnet werden, steuern die Interaktion zwischen den Komponenten der Programmoberfläche und der Anwendungsschnittstelle. Sie reagieren auf Ereignisse, die durch die Benutzerinteraktion mit der Oberfläche ausgelöst werden und rufen entsprechende Operationen der Anwendungsschnittstelle auf. Bei Bedarf aktualisieren sie die Programmoberfläche, um den aktuellen Status der Anwendung korrekt zu repräsentieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Aus welchen Elementen kann eine Interface-Deklaration bestehen?

A
  • (teilweise optionale) Zugriffsmodifikatoren;
  • Name des Interfaces;
  • eine optionale Liste von Typparametern, ggf. mit Schranken;
  • eine optionale Liste von Namen von Interfaces (als Supertypen), die dieses Interfaces erweitert;
  • benannte Konstanten, d.h. final deklarierte statische Felder;
  • erweiterte Methodensignaturen, die durch Klassen, die dieses Interface als Supertyp deklarieren, implementiert werden müssen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Einer Ihrer Kollegen sagt Ihnen: „Interfaces in Java sind überflüssig. Statt ihnen könnte man in Java genauso abstrakte Klassen verwenden.“ Was sagen Sie dazu? Begründen Sie!

A

Zwar ist es möglich, abstrakte Klassen zur Deklaration der öffentlichen Schnittstelle von Objekten zu verwenden; allerdings erlaubt Java aufgrund der fehlenden Mehrfachvererbung nicht, zu einer Klasse mehrere (abstrakte) Superklassen zu spezifizieren. In der Konsequenz könnte jede Klasse nur einen direkten Supertyp haben. Dahingegen können zu einer Klasse mehrere Interfaces als Supertypen spezifiziert werden, sodass eine Klasse auch mehrere direkte Supertypen haben kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Warum muss die main-Methode als Klassenmethode (also mit dem Schlüsselwort static) deklariert werden?

A

(vgl. Abschnitt 2.1.2; Seite 82) Beim Start eines Java-Programms existieren zunächst keinerlei Objekte. Die Existenz eines Empfängerobjekts ist aber Voraussetzung, um eine Instanzmethode (also eine nicht-statische Methode) der jeweiligen Klasse aufzurufen. Eine statische Methode hingegen kann auch ohne Empfängerobjekt aufgerufen werden und steht damit sofort beim Start des Programms zum Aufruf zur Verfügung.

17
Q

Warum ist das Schlüsselwort void notwendig?

A

(vgl. Abschnitt 1.3.3) Eine main-Methode darf keinen Rückgabewert haben. An die Stelle des Ergebnis-typs tritt dann das Schlüsselwort void.
* (Hinweis: Dass eine main(.)-Methode keinen Rückgabewert haben darf, kann man sich leicht erklären – denn was sollte mit einem solchen Rückgabewert passieren?*

Der Aufrufer der Methode ist ja gewissermaßen, wenn auch über Umwege, das Betriebssystem, was mit einem Java-Objekt im Allgemeinen nichts anfangen kann. Um dem Betriebssystem zumindest eine Rückmeldung über den Erfolg einer Programmausführung zu geben, bieten die Exit-Codes die Möglichkeit, sein Ergebnis bei Terminierung als ganze Zahl zu codieren. Andere Sprachen, z.B. C oder C++, erlauben als Rückgabetyp der main-Methode daher auch den Typ Integer. In Java kann ein Programm seinen Exit-Code lediglich durch seine explizite Beendigung mit Hilfe der Methode System.exit(int) als Parameter angeben.)

18
Q

Wozu dient der Parameter args? Warum ist er mit einem String-Array typisiert?

A

(vgl. Abschnitt 1.3.3) Beim Start eines Java-Programms mit Hilfe des Betriebssystems können dem Programm eine beliebige Anzahl von Argumenten (Programmparameter) übergeben werden. Jedes Argument besteht aus einer Zeichenkette und wird über die entsprechende Stelle des Arrays verfügbar gemacht.

19
Q

Aus welchen Einheiten besteht ein Java-Programm und woher können Sie stammen?

A

Ein Java Programm besteht aus einer Menge von Klassen. Diese können einerseits benutzergeschriebenen Klassen, andererseits Bibliotheksklassen sein.

20
Q

Welche Möglichkeiten gibt es, diese Einheiten (Klassen) zu organisieren? Welche Vorteile hat eine sorgfältige Organisation dieser Einheiten?

A

In Java können Klassen in sogenannten Paketen organisiert werden. Jedes Paket besitzt einen eindeutigen Namen und enthält Übersetzungseinheiten, die jeweils einer Datei mit der Namenserweiterung java entsprechen. Eine geeignete Organisation der Klassen bietet die folgenden Vorteile:

1. Erleichterung des Verständnisses von und der Orientierung in der Implementierung des Softwaresystems.

  1. Verbesserung der Wartbarkeit, indem eine Organisation gewählt wird, die die Abhängigkeiten der Klassen widerspiegelt.
  2. Steuerung der Zugriffsrechte, indem der Zugriff auf Einheiten eines Pakets aus anderen Paketen heraus durch die gezielte Definition von Sichtbarkeiten unterbunden wird.
  3. Getrennte Übersetzbarkeit von Teilmengen der Einheiten, aus denen das Softwaresystem besteht.
21
Q

Wozu dienen Interfaces?

A

Durch ein Interface kann eine öffentliche Schnittstelle als Typ definiert werden. Klassen können Interfaces als Supertypen angeben und damit zusagen, dass ihre Instanzen diese Schnittstelle bedienen können.

22
Q

Wozu dienen abstrakte Klassen?

A

Abstrakte Klassen dienen dazu, von mehreren Subtypen gemeinsam genutzte Teile der Implementierung an einer Stelle zusammenzufassen und Programme dadurch pflegeleichter zu machen.

23
Q

Wieso erlaubt der Java-Compiler es nicht, eine Methode einer abstrakten Klasse sowohl abstract als auch private zu deklarieren?

A

Eine Methode, welche abstract deklariert ist, verfügt über keine Implementierung. Durch ihre Deklaration wird gewissermaßen bekannt gegeben, dass eine Methode mit dieser Signatur auf dem Objekt aufgerufen werden kann.

Welcher Code beim Aufruf ausgeführt werden soll, ist jedoch nicht definiert und muss erst in den Subklassen festgelegt werden. Dies geschieht, indem die abstrakte Methodendeklaration überschrieben und eine Implementierung angegeben wird. Methoden, welche private deklariert sind, sind jedoch in den Subklassen nicht sichtbar, sodass sie insbesondere auch nicht zum Überschreiben zur Verfügung stehen. Für abstract deklarierten Methoden mit private Sichtbarkeit könnte so niemals eine Implementierung angegeben werden und die abstrakte Klasse wäre nutzlos.

24
Q

Anstatt eines Interfaces könnte man auch eine abstrakte Klasse deklarieren, in der alle Methoden öffentlich und abstrakt sind. Wieso kann man in Java auf Interfaces dennoch nicht verzichten?

A

Zu jeder Klasse kann jeweils nur genau eine Superklasse angegeben werden. Ohne Interfaces könnte eine Klasse so lediglich einen einzigen direkten Supertyp haben. Dies bedeutet jedoch eine zu starke Einschränkung für die Entwicklung großer Softwaresysteme.

Durch Interfaces ist es hingegen möglich, zu jeder Klasse mehrere Supertypen anzugeben, sodass Instanzen einer Klasse gleichzeitig mehrere Supertypen haben können, die selbst in keiner Subtypbeziehung zueinander stehen. Damit stellen sie eine wichtige Voraussetzung für die Umsetzung von Polymorphie in Java dar.

25
Q

Welche Varianten lokaler Parallelität lassen sich unterscheiden? Erklären Sie sie!

A

Reale Paralellität bedeutet, dass in einem einzigen System verschiedene Aktionen tatsächlich parallel ablaufen können.

Virtuelle Parallelität (oder auch Quasi-Parallelität) hingegen bedeutet, dass Aktionen, die zwar echt parallel laufen könnten, zunächst sequentialisiert werden und nacheinander ausgeführt werden. So kann ein Softwaresystem auch auf einem Einprozessorsystem scheinbar parallel ausgeführt werden

26
Q

Warum ist es auch dann von Vorteil, ein Softwaresystem so zu implementieren, dass es parallel ausgeführt werden kann, wenn es nur auf einem Einprozessorsystem laufen soll?

A

Häufig ist es nicht notwendig, die Ausführungsreihenfolge zweier Aktionen a und b festzulegen; d.h. für die Funktionalität des Programms ist es äquivalent, ob zuerst a oder b ausgeführt wird. In diesem Fall erlaubt die Berücksichtigung der Parallelität es, auf eine künstliche Sequentialisierung einer Implementierung zu verzichten und überlässt es einem Scheduler, zwischen verschiedenen Ausführungssträngen zu wechseln.

Eine solche verschränkte Ausführung ist insbesondere dann von Vorteil, wenn ein Strang gerade nichts „Sinnvolles“ tun kann, da er z.B. auf eine Antwort aus dem Netzwerk oder einem Gerät (z.B. der Festplatte) wartet.

27
Q

Welche Aufgabe hat der Scheduler? Welche Arten des Schedulings können unterschieden werden? Wann ist das Scheduling fair?

A

Der Scheduler hat die Aufgabe, die für die Programmausführung zur Verfügung stehenden Prozessoren den verschiedenen Ausführungssträngen zuzuteilen. Beim preemptiven Scheduling entscheidet der Scheduler darüber, wie lange ein Ausführungsstrang rechnen darf.

So kann er dem Strang z.B. nach Ablauf eines bestimmten Zeitfensters den Prozessor entziehen und ihn einem anderen Strang zuweisen.

Beim nicht-preemptiven Scheduling entscheidet ein Ausführungsstrang selbstständig darüber, wann er einen Prozessor wieder freigibt. Bei unvorsichtiger Implementierung kann dies dazu führen, dass ein Ausführungsstrang alle anderen blockiert. Das Scheduling ist dann fair, wenn der Scheduler garantiert, dass jeder Ausführungsstrang nach einer endlichen Wartezeit einen Prozessor zugeteilt bekommt.

28
Q

Was besagt die Grundregel des Subtyping?

A

(Abs. 3.2.2.2) „Die Grundregel für Subtyping besagt, dass ein Objekt von einem Subtyp an allen Programmstellen vorkommen kann, an denen Supertyp-Objekte zulässig sind.“

29
Q

Welche syntaktischen Voraussetzungen müssen erfüllt sein, wenn in einer Subklasse eine geerbte Methode überschrieben werden soll?

A

(vgl. Abs. 3.2.2.2) Um eine Methode zu überschreiben, muss in der Subklasse eine Methode gleichen Namens deklariert werden. Weiterhin müssen die Typen von Parametern, Rückgabeparametern und Ausnahmen der überschreibenden Methode zu denen der überschriebenen passen; d.h.:

  • Theoretisch: Kontravarianz bei Parametertypen; Kovarianz bei Rückgabe- und Ausnahmetypen.
  • für Java >= 5: Gleichheit der Parametertypen, Kovarianz bei Rückgabe- und Ausnahmetypen. (Kontravarianz der Parametertypen wird in Java nicht unterstützt, da es andernfalls bei überla-denen Methoden zu Konstellationen kommen kann, in denen der Compiler einen Methodenaufruf nicht eindeutig an eine Deklaration binden kann.)
  • für Java < 5: Gleichheit von Parameter- und Rückgabetypen
30
Q

Ist es ausreichend, die syntaktischen Voraussetzungen zu überprüfen, um sicherzustellen, dass ein Typ ein Subtyp ist? Welche besondere Herausforderung liegt hierin für den Programmierer?

A

(vgl. Abs. 3.2.2.2) Nein, das Konzept des Subtyping beschränkt sich nicht auf syntaktischer Konformität von Methodendeklarationen. Die Eigenschaft, dass ein Objekt eines Subtyps überall dort eingesetzt werden kann, wo ein Objekt eines Supertyps erwartet wird, stellt vielmehr auch die Forderung an das Verhalten des Objektes, dass es den Erwartungen genügen muss, die an den Supertypen gestellt werden.

Nur, wenn diese Erwartungen durch den Subtyp nicht verletzt werden, verhält dieser sich konform und ist damit ein Subtyp. Dies sicher zu stellen ist Aufgabe des Programmierers, da in der Regel keine formale Verhaltensspezifikation vorliegt bzw. geprüft werden kann.

31
Q

Ein C++-Entwickler vermisst die Polymorphie, die in C++ mit Mehrfachvererbung einhergeht, in Java. Welche Alternative bzw. welchen Kompromiss können Sie ihm in Java anbieten?

A

(Abs. 3.3.2) In Java gibt es keine Mehrfachvererbung – eine Klasse kann jeweils nur eine Klasse als ihre Superklasse deklarieren. Um dennoch zu einer Klasse mehrere Supertypen anzugeben, müssen diese als Interfaces definiert werden, von denen Klassen beliebig viele implementieren dürfen. So ist es möglich, dass Instanzen einer Klasse gleichzeitig mehrere, in keiner Subtypbeziehung stehenden Typen haben können.

32
Q

Ein C#-Entwickler vermisst Methodentypen, um einen Algorithmus als aktuellen Parameter einer anderen Methode anzugeben. Welche Alternative bzw. welchen Kompromiss können Sie ihm in Java anbieten?

A

(Abs. 3.2.6.3) In Java ist es nicht möglich, eine Methode direkt zu referenzieren. Um einen Algorithmus dennoch in einer Variable referenzieren zu können, kann man eine Schnittstelle definieren, die genau eine Methode deklariert. Verschiedene Klassen (typischerweise anonyme Klassen) können diese Schnittstelle implementieren und jeweils eine individuelle Implementierung dieser Methode bereitstellen.

An den Stellen, an denen in anderen Programmiersprachen einen Zeiger auf eine Methode verwendet wird, wird nun eine Referenz auf eine Instanz einer solchen Klasse übergeben.

33
Q

Ein Pascal-Entwickler vermisst Konstanten in Java. Welche Alternative bzw. welchen Kompromiss können Sie ihm in Java anbieten?

A

(Abs. 2.1.4.1) Java kennt keine Konstanten, jedoch kann man Attribute als statisch (static) und unveränderlich (final) deklarieren. static macht das deklarierte Attribut zu einem Klassenattribut, sodass es unmittelbar nach dem Laden der Klasse durch den Class-Loader verfügbar und referenzierbar ist (insbesondere ohne zuvor eine Instanz der Klasse zu erzeugen).

Weiterhin bewirkt final, dass dem Attribut ein initialer Wert zugewiesen werden muss (entweder an der Deklarationsstelle oder in einem Initialisierungsblock) und dieser nicht überschrieben werden kann. Es ist also (a) unabhängig von konkreten Objektinstanzen und (b) unveränderlich und eignet sich damit als Alternative zu Konstanten anderer Programmiersprachen.

34
Q

Nennen Sie zwei Gründe, warum sich das objektorientierte Grundmodell besonders gut für die Programmierung verteilter Systeme eignet.

A
  • Objekte fassen Daten und Operationen zu Einheiten mit klar definierten Schnittstellen zusammen; Objekte bzw. Klassen bilden demnach weitgehend unabhängige Programmteile, die sich auf verschiedene Prozesse bzw. Rechner verteilen lassen.
  • Kommunikation zwischen Objekten über Nachrichten ist integraler Bestandteil des objektorientierten Grundmodells, sodass bereits alle wesentlichen Sprachmittel für die Kommunikation im Rahmen verteilter Systeme zur Verfügung stehen.
35
Q

Stellen Sie die Kommunikation der drei Komponenten der MVC-Architektur in Form einer Grafik dar.

A
36
Q

Wie nennt man das Phänomen, wenn mehrere Referenzen auf das gleiche Objekt zeigen?

A

Aliasing.

Dieses Phänomen wird Aliasing genannt, die verschiedenen Referenzen auf das gleiche Objekt sind Aliase (zueinander).