Computing">
[Go to site: main page, start]

0% fanden dieses Dokument nützlich (0 Abstimmungen)
13 Ansichten7 Seiten

Programmlerblatt

Das Dokument bietet eine umfassende Übersicht über grundlegende Konzepte der Programmierung in Java, einschließlich Sichtbarkeiten (public, private, protected, default), Klassen und Objekte, statische Elemente, abstrakte Klassen, Interfaces, Fehlerbehandlung und verschiedene Sortieralgorithmen. Es beschreibt auch die Funktionsweise von Registermaschinen und genetischen Algorithmen sowie neuronalen Netzen, einschließlich ihrer Struktur, Funktionsweise und Herausforderungen wie Overfitting und Underfitting. Die Informationen sind in klaren Abschnitten gegliedert, die jeweils spezifische Themen und Techniken behandeln.

Hochgeladen von

firex679
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
13 Ansichten7 Seiten

Programmlerblatt

Das Dokument bietet eine umfassende Übersicht über grundlegende Konzepte der Programmierung in Java, einschließlich Sichtbarkeiten (public, private, protected, default), Klassen und Objekte, statische Elemente, abstrakte Klassen, Interfaces, Fehlerbehandlung und verschiedene Sortieralgorithmen. Es beschreibt auch die Funktionsweise von Registermaschinen und genetischen Algorithmen sowie neuronalen Netzen, einschließlich ihrer Struktur, Funktionsweise und Herausforderungen wie Overfitting und Underfitting. Die Informationen sind in klaren Abschnitten gegliedert, die jeweils spezifische Themen und Techniken behandeln.

Hochgeladen von

firex679
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

2.

Definitionen

public, private, protected, default:


public:
Methode ist für alle Klassen sichtbar und kann auch von allen Klassen innerhalb des Codes
aufgerufen werden..
Private (privat):
Eine mit "private" markierte Klasse, Methode oder Variable ist nur innerhalb derselben Klasse
sichtbar. Sie kann nicht von anderen Klassen oder außerhalb der Klasse aufgerufen oder verwendet
werden.
Protected (geschützt): Eine mit "protected" markierte Klasse, Methode oder Variable ist innerhalb
derselben Klasse sichtbar sowie in abgeleiteten Klassen (Unterklassen) und Klassen im selben
Paket.
Default (Standard, Paketsichtbarkeit): Eine Klasse, Methode oder Variable mit dieser Sichtbarkeit
ist nur innerhalb desselben Pakets sichtbar.

Klasse:
Eine Klasse ist ein abstraktes Konzept. Sie enthält die Definition der Eigenschaften und des
Verhaltens aller Objekte in einer Klasse.
Im Code: ist das Schlüsselwort, das verwendet wird, um eine Klasse in Java zu definieren, bzw. zu
erstellen. Eine Klasse ist eine Schablone oder ein Bauplan, der die Eigenschaften (Variablen) und
das Verhalten (Methoden) von Objekten beschreibt.

Objekt:
Eine konkrete Instanz einer Klasse. Es kann viele Objekte einer Klasse geben, die sich in der
Individuellen Ausgestaltung unterscheiden. Während die Klasse z.B. definiert, dass eine Katze eine
Eigenschaft namens „Fellfarbe“ hat, kann es ein Katzen-Objekt geben, das eine schwarze Farbe hat,
ein anderes eine graue Farbe etc.
Im Code: – Die Methode wird am Ende der Verarbeitung ein Objekt vom Typ objektname
zurückgeben

Static (statisch): "static" ist ein Modifikator, der eine Variable oder Methode an die Klasse selbst
bindet und nicht an eine spezifisches Objekt. Eine statische Variable existiert einmal für die gesamte
Klasse und wird von allen Objekten gemeinsam genutzt. Eine Änderung an einer Variable werden
sich auf alle Objekte der Klasse auswirken.

Abstrakte Klassen:
Abstrakte Methoden sind dazu gedacht, um weit oben in der Klassenhierarchie zu verlangen, dass in
einer der Tochterklassen eine Funktionalität definiert werden muss.
Wenn die abstrakte Klasse Tier eine abstrakte Methode getTierart() hat, dann muss jede Klasse, die
von ihr abgeleitet wird, entweder eine Implementierung der Methode enthalten, oder selbst wieder
abstrakt sein.

Interfaces:
Interfaces sind Organisationswerkzeuge für die Modellierung von Klassen und Klassenhierarchien.
Sie definieren Methodensignaturen ohne Implementierungen und können keine Instanzen erstellen.
Interfaces ermöglichen es, das Prinzip der einfachen Vererbung zu umgehen, da Klassen mehrere
Interfaces implementieren können. Dadurch ist eine Mehrfachvererbung von Klassen möglich.
Finale Klassen:
Der dem Attribut zugewiesene Wert kann nicht überschrieben werden. Bei Attributen mit einfachen
Datentypen ist der Wert komplett unveränderbar / konstant. Bei Attributen mit Objekt-Datentypen
kann das Objekt selbst geändert werden, zum Beispiel durch den Aufruf von Methoden auf dem
entsprechenden Objekt, nur die Zuweisung der Variablen zu genau diesem Objekt ist unveränderbar.
Auf den Aspekt, ob die Klasse final ist oder nicht, haben finale Attribute keinen Einfluss.

Exceptions:
Exceptions ermöglichen es, auf Fehler zu reagieren und alternative Lösungen oder Maßnahmen zu
ergreifen. Beispielsweise kann eine invalide Zahl durch die Annahme eines Standardwerts
behandelt werden. Es ist wichtig, die Reaktion auf Fehler individuell zu definieren. Verschiedene
Fehler können behandelt werden, z.B. durch Hinzufügen einer Nummer zu einem Dateinamen oder
durch Verwendung der Systemzeit bei Netzwerkproblemen. Die Handhabung von Fehlern hängt
von der konkreten Situation ab.

In Java werden verschiedene Arten von Fehlern durch spezielle Klassen repräsentiert: Fehler,
ungeprüfte Ausnahmen und geprüfte Ausnahmen. Jede Gruppe hat ihre eigene Bedeutung und
erfordert unterschiedliche Maßnahmen zur Fehlerbehandlung: Errors, unchecked, checked

Fehler (Errors): Diese Fehler haben ihren Ursprung in der Java Virtual Machine (JVM) und liegen
außerhalb des laufenden Programms. Es ist schwer, auf diese Fehler zu reagieren, da sie meist
schwerwiegende Probleme darstellen. Beispiele sind "VirtualMachineError" und
"OutOfMemoryError".

Ungeprüfte Ausnahmen (Unchecked Exceptions, Runtime Exceptions): Diese Fehler entstehen


durch unsachgemäße Programmierung und sollten durch korrekte Programmierung vermieden
werden. Beispiele sind "NullPointerException", "ArrayIndexOutOfBoundsException" und
"ReadOnlyFileSystemException".
Geprüfte Ausnahmen (Checked Exceptions): Diese Ausnahmen können nicht durch richtige
Programmierung vermieden werden und treten regelmäßig auf. Der Compiler überprüft, ob eine
Fehlerbehandlung für diese Art von Ausnahme vorhanden ist, andernfalls generiert er einen Fehler.
Beispiele sind "FileNotFoundException" und "InterruptedByTimeoutException".

Try-catch-block & throws


In Java wird ein Fehler mit einem Try-Block umschlossen und anschließend im Catch-Block
behandelt. Es können mehrere Catch-Blöcke vorhanden sein, um verschiedene Arten von Fehlern
im Try-Block abzufangen. Jeder Catch-Block ist für eine spezifische Art von Exception zuständig.
Im Catch-Block können Informationen über die Fehlerklasse, eine Fehlerbeschreibung und der
Stack-Trace abgelesen werden.
Eine Methode kann das "throws"-Schlüsselwort verwenden, um anzuzeigen, dass sie eine Exception
erwartet, aber nicht selbst behandelt. Die aufrufende Methode ist für die Fehlerbehandlung
zuständig.
Algorithmen:
Natürlich! Hier sind kurze Antworten zu den Algorithmen, die du genannt hast:

Name: Lineare Suche (Linear Search)


Ziel: Die lineare Suche durchsucht eine Liste, um ein bestimmtes Element zu finden. Sie wird
verwendet, wenn die Liste nicht sortiert ist oder keine zusätzlichen Informationen über die
Anordnung der Elemente vorliegen.
Strategie: Die lineare Suche überprüft jedes Element der Liste nacheinander, beginnend am Anfang,
bis das gesuchte Element gefunden wird oder das Ende der Liste erreicht ist.

Name: Binäre Suche (Binary Search)


Ziel: Die binäre Suche ist ein effizienter Algorithmus zum Auffinden eines Elements in einer
sortierten Liste. Sie kann verwendet werden, um das Element in logarithmischer Zeit zu finden.
Strategie: Die binäre Suche teilt die sortierte Liste wiederholt in zwei Hälften und vergleicht das
gesuchte Element mit dem mittleren Element. Basierend auf dem Vergleichsergebnis wird
entschieden, in welcher Hälfte des Rests der Liste das gesuchte Element liegen könnte. Dieser
Prozess wird wiederholt, bis das Element gefunden wird oder festgestellt wird, dass es nicht in der
Liste vorhanden ist.
Annahme: Die Eingabemenge muss sortiert sein, damit die binäre Suche korrekt funktioniert.
Name: Bubblesort
Ziel: Bubblesort ist ein einfacher Sortieralgorithmus, der eine Liste von Elementen in aufsteigender
oder absteigender Reihenfolge sortiert.
Strategie: Bubblesort vergleicht benachbarte Elemente in der Liste und tauscht sie gegebenenfalls,
wenn sie nicht in der richtigen Reihenfolge sind. Dabei "steigen" die größeren (oder kleineren)
Elemente allmählich an das Ende der Liste auf. Dieser Vorgang wird wiederholt, bis die gesamte
Liste sortiert ist.

Name: Insertionsort
Ziel: Insertionsort sortiert eine Liste von Elementen in aufsteigender oder absteigender Reihenfolge.
Strategie: Insertionsort beginnt mit einem Element und fügt nacheinander weitere Elemente in die
bereits sortierten Teillisten ein. Dabei wird jedes Element an die richtige Position verschoben.
Dieser Vorgang wird fortgesetzt, bis die gesamte Liste sortiert ist.
Name: Selectionsort
Ziel: Selectionsort sortiert eine Liste von Elementen in aufsteigender oder absteigender
Reihenfolge.
Strategie: Selectionsort findet das kleinste (oder größte) Element in der unsortierten Teilmenge und
tauscht es mit dem Element an der richtigen Position. Dadurch "wächst" die sortierte Teilmenge
nach und nach am Anfang der Liste. Dieser Vorgang wird wiederholt, bis die gesamte Liste sortiert
ist.

Name: Mergesort
Ziel: Mergesort ist ein effizienter Sortieralgorithmus, der eine Liste von Elementen in aufsteigender
oder absteigender Reihenfolge sortiert.
Strategie: Mergesort teilt die Liste rekursiv in kleinere Listen auf, sortiert diese und fusioniert sie
dann, um die sortierte Gesamtliste zu erhalten. Dieser Prozess wird rekursiv fortgesetzt, bis die
gesamte Liste sortiert ist.
Registermaschine:

3 Arten von Registern zum Abspeichern von Ganzzahlen:


Befehlszähler B1: gibt an welchem Schritt das Programm gerade steht
Arbeitsregister C0: einziger Ort wo Daten geändert werden kann und Berechnungen durchgeführt
werden können
Speicherregister C1 bis Cn: Ort zum Speichen von Zahlen
Eine Konfiguration ist eine Kombination von Werten für alle Register

Befehle bestehen aus


Ein und Ausgabe
Arithmetische Befehle
Sprunganweisungen

Die Befehle sind:


Ladebefehle:
 LOAD i: lade den Wert aus dem Register Ci in das Arbeitsregister (C0)
 STORE i: speichere den Wert aus C0 im Register Ci , C0 bleibt unverändert
 CLOAD i: ändert C0 auf den Wert von i
Rechenoperationen:
 ADD i: addiert den Wert aus Ci auf den Wert in C0
 CADD i: addiert den Wert i auf C0
 SUB i: subtrahiert den Wert aus Ci von C0 ab
 CSUB i: subtrahiert den Wert i von C0 ab
 MULTI i: multipliziert den Wert aus Ci mit C0
 CMULTI i: multipliziert den Wert i mit C0
 DIV i: dividiert den Wert aus C0 durch Ci
 CDIV i: dividiert den Wert aus C0 durch i
Hinweise
 Sollte es bei Multiplikation und Division zu Fließkommazahlen kommen werden die
Nachkommastellen abgeschnitten
 Es können keine negativen Zahlen abgespeichert werden. Das Ergebnis ist in diesem Fall 0
Sprungbefehle
• Manipulieren den Befehlszähler
• Alle anderen Register bleiben unverändert
• GOTO i: springe zum Befehl i
• IF C0=0 GOTO i: Wenn C0 gleich 0 gehe zum Befehl i, wenn nicht erhöhe den
Befehlszähler um 1
Stoppbefehl
 END: beendet das Programm, b‘=b und Cj‘ = Cj für j>= 0
Beim Sprungbefehl ändert sich der Befehlszähler in die Zahl des Befehls
Also bei Go To 4 ist b=4 oder Go To 12 ist b =12
Bei END endet der Befehl einfach, Befehlszähler wird nicht erhöht.

Genetische Algorythmen:
Genetische Algorithmen sind ein Ansatz zur Lösung von Problemen, der sich an der Vererbung von
Eigenschaften in der Natur orientiert. Dabei werden die folgenden Prinzipien genutzt:
1. Phänotypen: Jeder mögliche Ansatz zur Problemlösung wird als "Individuum" betrachtet. Der
Phänotyp eines Individuums ist die äußerlich erkennbare Erscheinungsform, also wie das
Individuum die Aufgabe löst.

2. Phänotypen vs. Genotypen: Neben dem Phänotypen, der sich auf die äußere Betrachtung
konzentriert, besitzt jedes Individuum auch einen Genotypen. Der Genotypen beschreibt die genaue
interne Zusammensetzung der Erbanlagen und wird zur Erstellung neuer Lösungen (Kinder)
verwendet.

3. Fitness: Die Fitness eines Individuums beschreibt den Grad, in dem es das gestellte Problem löst.
Die Fitness wird verwendet, um Individuen zu bewerten und anzuordnen.

4. Generationenfolge: Durch eine Abfolge von Generationen werden die Fitnesswerte der
Individuen allmählich verbessert. Dabei werden für die Erstellung der nächsten Generation die
Individuen aus der aktuellen Generation mit der höchsten Fitness ausgewählt.

5. Mutation: Durch eine Mutations-Funktion werden zufällige Abweichungen zwischen den


Generationen eingeführt. Dadurch besteht die Möglichkeit, dass neue Lösungsstrategien in die
nächste Generation gelangen, die in der vorherigen Generation nicht vorhanden waren.

Neuronale Netze:

Neuronale Netze sind eine nicht-algorithmische Methode zur Problemlösung. Sie bestehen aus
Signalprozessoren, die Eingangssignale in Ausgangssignale umwandeln. Durch Training mit
Testdaten lernen sie, Muster in den Daten zu erkennen. Die Netzstruktur ergibt sich aus den
Verbindungen der Signalprozessoren.

Ein einfaches Neuron, das Perzeptron, hat Eingänge, Gewichtungen, einen Ausgang und einen
Schwellenwert. Mehrere Perzeptronen sind miteinander verbunden und erzeugen Ausgangswerte
basierend auf den Eingangsdaten und Gewichtungen. Das Ausgangssignal wird nur erzeugt, wenn
die gewichtete Summe den Schwellenwert überschreitet.

Um eine bestimmte Aufgabe mit einem neuronalen Netz zu lösen, müssen die Gewichte richtig
belegt werden. Dies kann durch einen Lernvorgang erreicht werden, bei dem das Netzwerk mit
einem Trainingsdatensatz in mehreren Durchläufen trainiert wird. Der Trainingsdatensatz enthält
verschiedene Eingabekonfigurationen und die erwarteten Ergebnisse. Die Gewichte werden
zunächst zufällig belegt und dann anhand der Abweichung zwischen den erwarteten und
gemessenen Ergebnissen angepasst.
Neuronale Netze können durch die Verbindung und Verschaltung vieler Neuronen auch komplexe
Strukturen bilden. Komplexe Netze können auf spezifische Aufgaben trainiert und angepasst
werden, indem neben den Gewichten auch Schwellenwerte, Output-Funktionen und die
Netztopologie verändert werden.
Beim Training eines neuronalen Netzwerks sind zwei Fehlerzustände zu beachten: Overfitting und
Underfitting. Overfitting tritt auf, wenn das Netzwerk die Trainingsdaten zu stark lernt und keine
generalisierten Muster erkennt, sondern nur spezifische Trainingsdaten. Underfitting tritt auf, wenn
das Netzwerk nicht ausreichend trainiert wurde und viele reale Daten falsch bewertet werden. Das
Ziel besteht darin, einen Punkt zu finden, an dem das Netzwerk erfolgreich trainiert ist und gute
Ergebnisse auf neuen Daten liefert

Das könnte Ihnen auch gefallen