Einführung in die Programmierung

 ← zurück zur Startseite

Was ist Informatik?

Was ist ein Algorithmus?

Java Entwicklung
Java ist:

… eine Programmiersprache.

… eine Laufzeitumgebung.

Einsatzmöglichkeiten:

Versionen


JDK -> Java Development Kit

JRE -> Java Runtime Enviroment (ab Version 11 über JDK)

Konzept einer virtuellen Maschine


Wichtige Kommandos

Arten von Java-Programmen
Stand-Alone-Anwendungen

Applets

Servlets


Java Syntaxhinweise

Was ist eine Klasse?
Eine Klasse ist eine Sammlung von Daten (Attributen) sowie von Methoden (Operationen), die mit diesen Daten arbeiten.

Eine Klasse umfasst im wesentlichen zwei Dinge:

-> Attribute (was das Objekt hat)

-> Operationen (was das Objekt kann)

Aufbau von Java-Klassen

Aufbau:

Schlüsselwort class

Bezeichnung/Name der Klasse

Klassenrumpf -> in “{}” (geschweifte Klammern)

Zusatz:
vor dem Schlüsselwort class können Modifikatoren stehen

-> legen Eigenschaften der Klasse fest, z.B. public oder private

Klassenname und Dateiname (*.java) müssen immer gleich sein!

public class Hallo Asterix {

}+

Klassenrumpf (zwischen den geschweiften Klammern)



Aufbau von Java-Klassen - Klassenrumpfinhalt


Inhalt:

Methodendefinition
public static void main(String[] args) {  	  	                  
       String ichBinEineVariable = “Hallo, Asterix!”;                  
       System.out.println(ichBinEineVariable);  	             
} 
Erklärung:


Variablen

Kommentare 
= Zur Dokumentation von Quellcode

Unterteilung:

Kontrollstrukturen

Reihenfolge/Sequenz
System.out.println("byte:");
System.out.println("\t minimaler Wert: "+ Byte.MIN_VALUE);
System.out.println("\t maximaler Wert: "+ Byte.MAX_VALUE);
System.out.println("\t bit-Anzahl: "+ Byte.Byte.Size);)
Verzweigung/Selektion
Aussagenlogik
Aussage Junktor
Nicht A ¬A
A und B A ∧ B
A oder B A ∨ B
Wenn A dann B A → B
A genau dann, wenn B A ↔ B

Beispiel: Hans möchte, dass möglichst viele seiner Freunde Anne, Bernd, Christine, Dirk und Eva zu seiner Bachelorverteidigung kommen. Er weiß Folgendes: Wenn und Anne beide kommen, dann wird Eva auf keine Fall kommen. Und Dirk wird auf keinen Fall kommen, wenn Bernd und Eva beide kommen. Aber Eva kommt allenfalls dann, wenn Christine und Dirk kommen. Andererseits kommt Christine nur dann, wenn auch Anne kommt. Anne wiederum wird nur dann kommen, wenn auch Bernd oder Christine kommen.

Logische Beziehungen

AND:

A B Ergebnis
0 0 0
0 1 0
1 0 0
1 1 1


NOT:
A Ergebnis
0 1
1 0

OR:
A B Ergebnis
0 0 0
0 1 1
1 0 1
1 1 1


XOR:
A B Ergebnis
0 0 0
0 1 1
1 0 1
1 1 0


Darstellung von logischen Beziehungen
Operator Ausdruck Beschreibung
! !a NOT
&& a && a AND
      a {   } b OR

Unterschied zwischen && / || und & / |:

Vergleichsoperatoren

Operator Ausdruck Ausdruck liefert true, wenn
> a > b a größer als b ist
>= a >= b a größer oder gleich b ist
< a < b a kleiner als b ist
<= a <= b a kleiner oder gleich b ist
== a == b a gleich b ist -> nur für elementare Datentypen
!= a != b a ungleich b ist


Rechenoperationen

Operator Ausdruck Erklärung
+ + Addition (Plus)
- - Subtraktion (Minus)
* * Multiplikation (Mal)
/ / Division (Teilen)
Modulo % Modulo (Restwertdivision)
Modulo (ohne %) m-n*(m/n)  


if-else-Anweisungen

if-Anweisung:
if (bedingung) {               
       Anweisungen -> werden ausgeführt, wenn bedingung true liefert           
} 

if-else-Anweisung:
if (bedingung) {               
       Anweisungen -> werden ausgeführt, wenn bedingung true liefert           
} else {
       Anweisung -> werden ausgeführt, wenn bedingung false liefert           
} 

''if-Schleife":
if (bedingung) {                
       ...            
} else if (bedingung) {  	      
       ...           
}  
-> ∞

switch-Anweisung
Aufbau:

switch (ausdruck) {
       case wert1: Anweisungen ...
       case wert2: Anweisungen ...
       default: Anweisungen
}

Bedingungsoperator
Wiederholung/Iteration
while-Schleife
Aufbau:
while (bedingung) {
       Anweisungen 
}
do-while-Schleife
Aufbau:
do {
       Anweisungen
} while (bedingung); 
for-Schleife
Aufbau:
for(init; bedingung, zählen){               
       Anweisungen           
}
Erweiterte for-Schleife
Aufbau:
for(Speichervariable: Datenstruktur){               
       Anweisungen           
} 
OOP - Objektorientiere Programmierung
Objekte
Kapselung


Sichtbarkeit

Sichtbarkeit für Methoden und Attribute

Zu sehen von public protected default private
innerhalb der selben Klasse Ja Ja Ja Ja
Klassen im selben package Ja Ja Ja Nein
Klasse außerhalb des package Ja Nein Nein Nein
Unterklassen im selben package Ja Ja Ja Nein
Unterklasse außerhalb des package Ja Ja Nein Nein

Java Package
Gruppierung von Klassen zu einem Bereich

Unterscheidung:
Benutzung:

i
mport java.util.Arraylist; //Import einer einzelnen Klasse
import java.nio.*; //Import eines gesamten Packages mit allen Klassen der Ebene


Konventionen:

Spezielle Methoden von Klassen

Der Konstruktor
public class Punkt {
       public Punkt (){
       }                    
} 
toString()
equals()
Klassendiagramme


Darstellungsformen von Algorithmen

Struktogramm
↳auch: Nassi-Shneiderman Diagramm



Verbal
Pseudocode

Struktogramm




Beispielaufgabe größter gemeinsamer Teiler:
public int ggt(int A, int B){                          
       if (A < B){ 	      	                              
              int temp = A;                              
              A = B;                              
              B = tmp;
       }
       int R = A % B; 
       while (R > 0){
              A = B; 
              B = R;
              R = A % B;
       } 
       return B; 
} 
Beispiel Klassenkarte Kreis




Vererbung
drei grundsätzliche Möglichkeiten:

objektorientierte Klassenhierarchie
Vererbung
Überschreiben von Methoden
Mehrfachvererbung

Vorteile und Besonderheiten
Vererbung Beispiel


Telefon
package vererbung;
       public class Telefon {
              private int rufnummer;
       public Telefon (){
              rufnummer = 1;
      }
       public Telefon(int rufnummer){
              this.rufnummer = rufnummer
       }
       public void klingeln(){ 
              System.out.println("Ring");
       }   
       public int getRufnummer() {
       }
} 
Smartphone
package vererbung;
       public class Smartphone extends Telefon {
              private String netz;
              private String marke;
       public Smartphone(int rufnummer){
              super(rufnummer); //super -> Elternklasse
              //super()-> steht im Konstruktor an 1. Stelle
              netz = "HSMW Netz";
              marke = "HSMW Mobil";
       }
       public void klingeln() {
              System.out.println("La La");
              super.klingeln();
       }
} 

class Tester

SmartphoneTester
package tester;
import vererbung, Smartphone;
public class SmartphoneTester{
       public static void main(String[] args){
              Smartphone tel = new Smartphone(123456789);
              System.out.println(tel.getRufnummer());
              tel.klingeln();
       }
}
Interface



Abstrakte Klassen


Generics

Anwendung:
public class XYZ<T>{...}


Aufruf: Beispiel Generics:
package tester;
public class Vertauschen <T> {
       private T wertA;
       private T wertB; 
       /**
       * @return the wertA 
       */
       public T getWertA() {
              return wertA;
       }
       /**
       * @param wertA the wertA to set
       */
       public void setWertA(T wertA) {
              this.wertA = wertA;
       }
       /**
       * @return the wertB
       */
       public T getWertB() {
              return wertB;
       }
       /**
       * @param wertB the wertB to set
       */
       public void setWertB(T wertB) {
              this.wertB = wertB;
       }
       public void tausche() {
              T tmp = wertA;
              wert A = wertB;
              wertB = tmp;
       }
}  

Zeichen
Zeichenketten
Anlegen von Zeichenketten :
String zeichenkette1 = "abc";
String zeichenkette2 = new String("abc");
char[] daten = {'a','b','c'};
String zeichenkette3 = new String(daten);  

String s="""
       Hallo
""";


printf()
Verarbeitung von Zeichenketten
StringBuffer /-builder
  String StringBuffer StringBuilder
Speicherung Java String Pool Java Heap Space  
Modifizierbar Nein Ja Ja
Threadsicher Ja Ja Nein
Geschwindigkeit Schnell Langsam Schnell
Anwendung Wenn nicht oft etwas geändert wird Wenn oft etwasgeändert in mehreren Threads Wenn oft etwas in einem Thread geändert wird      

Zufallszahlen - Berechnung in JAVA
-> Lehmer (1948): lineare Kongruenz

[0, m - 1] → x_{n+1}=(x_n * a + c) % m; a,b,c = konstant

Große Zahlen in Java
Array und Arraylisten
Array
Deklarieren, Definieren und Auffüllen
Zugriff auf Felder
Variable Parameterliste
public class VariableParameterliste{
       public void berechneSumme(double... werte){
              double summe = 0;
              for(double wert : werte){
                  summe = summe +wert;
              }
              System.out.println(summe); } }

public static void gibWerteAus(String... s){
       for(int i=0; i<s.length; i++){
              System.out.println(s[i]);
       }
}
public static void main(String[] args) {
       gibWerteAus("a", "b");
       gibWerteAus("a", "b", "c");
       gibWerteAus("a", "b", "c", "d");
}


ArrayList
ArrayList<String> namen = new ArrayList<String>();
namen.add("Asterix");
namen.add("Obelix");
namen.add("Miraculix");
namen.add("Idefix");
String name = namen.get(0);
System.out.println(name);



Enumeration
public enum Wochentage {
       MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG
}
System.out.println()

Was ist ein Muster?
Arten von Mustern
MVC
Model-View-Controller
Lambda Ausdrücke
GUI in Java

Module Info
Einführung in JavaFX

Neu in JavaFX
Grundbausteine von JavaFX
JavaFX Konzept
JavaFX-Pane

Events in Java

Interaktion in grafischen Oberflächen
Ereignisbehandlung

MVVM
Model View ViewModel

Properties/Binding in JavaFX
Animationen in Java
Effekte in JavaFX
AnimationTimer
Von-Neumann-Architektur




Systembus

Nebenläufigkeit
Nebenläufigkeit und Parallelität
Probleme bei Threads
Thread Verklemmung



Java - Sprachelemente für Nebenläufigkeit

Automatisisierte Tests
JUnit
Framework zum Testen von Java-Programmen

JUnit-Testmethoden

Records in Java
Reguläre Audrücke in Java
Regex Bedeutung
| Oder-Verknüpfung
. genau ein Zeichen
^ gesuchter Wert beginnt mit
$ gesuchter Wert endet mit
/d Zahlen
/s Whitespace-Zeichen

Beispielaufgaben/Übungsaufgaben:

public class CascadePrinterAufwärts {

 

public static void main(String[] args) {

 

printer();

}

public static void printer() {

for(int m = 0; m < 11; m++) {

for(int n = 0; n < m; n++) {

System.out.print("*");

}

System.out.println("");

}

}

 

}

 

Ausgabe:

*

**

***

****

*****

******

*******

********

*********

**********

 

public class CascadePrinterAbwärts {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

 

printer();

}

public static void printer() {

for(int m = 0; m < 10; m++) {

for(int n = m; n < 10; n++) {

System.out.print("*");

}

System.out.println("");

}

}

 

}

 

Ausgabe:

**********

*********

********

*******

******

*****

****

***

**

*


Beispielaufgabe Firma/Bank/OOP: 

Mitarbeiter.java

import java.util.concurrent.atomic.AtomicInteger;

 

public class Mitarbeiter {

 

private String name;

private String vorname;

private int id;

private static final AtomicInteger counter = new AtomicInteger(-1);

public Mitarbeiter(String name, String vorname) {

this.name = name;

this.vorname = vorname;

this.id = counter.incrementAndGet();

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setVorname(String vorname) {

this.vorname = vorname;

}

public String getVorname() {

return vorname;

}

public int getId() {

return id;

}

public String toString() {

return "Mitarbeiter: " + vorname + " " + name + " ID: " + id;

}

}

 

PersonalVerwaltung.java

import java.util.ArrayList;

 

public class PersonalVerwaltung {

 

private ArrayList<Mitarbeiter> mitarbeiterListe;

public PersonalVerwaltung() {

mitarbeiterListe = new ArrayList<Mitarbeiter>();

}

public void mitarbeiterHinzufuegen(String name, String vorname) {

Mitarbeiter m = new Mitarbeiter(name, vorname);

mitarbeiterListe.add(m);

}

public void mitarbeiterEntfernen(Mitarbeiter m) {

for(int zaehl = 0; zaehl < mitarbeiterListe.size(); zaehl++) {

if(m == mitarbeiterListe.get(zaehl)) {

mitarbeiterListe.remove(zaehl);

}

}

}

public void listMitarbeiter() {

for(int cnt = 0; cnt < mitarbeiterListe.size(); cnt++) {

System.out.println(mitarbeiterListe.get(cnt));

}

}

}

 


MitarbeiterVerwaltung.java

public class MitarbeiterVerwaltung {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

 

PersonalVerwaltung pv = new PersonalVerwaltung();

Mitarbeiter m1 = new Mitarbeiter("fdsga", "dgf");

System.out.println(m1);

pv.mitarbeiterHinzufuegen("Commandroggen", "Kunt");

pv.mitarbeiterHinzufuegen("Piclas", "Nechan");

pv.listMitarbeiter();

}

 

}

 


Allgemeine Java-Hilfe:
https://www.javaundoop.de/index.php
https://codegym.cc/de/groups/posts/getter-und-setter-in-java