Einführung in die objektorientierte Programmierung

Klausurvorbereitung

Bruch (Aufgabe 2 HK 2012)

class Bruch{
 final int zaehler;
 final int nenner;
 
 public Bruch(int z, int n){
 zaehler=z; nenner=n;
 }
 
 public Bruch multipliziere(Bruch b){
 Bruch erg= new Bruch(this.zaehler * b.zaehler,
 this.nenner * b.nenner);
 return erg;
 }
 
 public String toString(){
 return this.zaehler+"/"+this.nenner;
 }
 
 public static void main(String[] args){
 Bruch b1 = new Bruch(3,4);
 Bruch b2 = new Bruch(2,3);
 Bruch b3 ;
 
 b3 = b1.multipliziere(b2);
 System.out.println(b3.toString());
 
 }
 }


Interfaces und Mehrfachvererbung Vererbung (HK11 Aufg 7)

 
interface MitBeinen{
public int anzahlBeine();
} abstract class Tier{
public abstract String nameDerTierart();
} public class Fisch extends Tier{ public String nameDerTierart(){ return "Fisch"; } } public class Spinne extends Tier implements MitBeinen{
public String nameDerTierart(){
return "Spinne";
}
public int anzahlBeine(){
return 8;
}
}
public class Tisch implements MitBeinen{
public int anzahlBeine(){
return 4;
}
}


Ausnahmebehandlung (NK12 Aufg 5)

public class BoxIstVollException extends Exception{
   //  BoxIstVollException(){
   //    return "Box ist rappelvoll";
   //  }
 }
public class BoxIstLeerException extends Exception{
// BoxIstLeerException(){
// return "Box ist leer";
// }
} class Box {
String inhalt;

public void einlagern(String inhalt) throws BoxIstVollException{
if(this.inhalt != null)
throw new BoxIstVollException();
this.inhalt = inhalt;
}

public String entnehmen() throws BoxIstLeerException{
if(inhalt == null)
throw new BoxIstLeerException();
String entnommen = inhalt;
inhalt = null;
return entnommen;
}

public static void main(String[] args) {
Box box = new Box();
try{
System.out.println(box.entnehmen());
}
catch (BoxIstLeerException e){
System.out.println(e);
}
try{
box.einlagern("abc");
}
catch (BoxIstVollException e){
System.out.println(e);
}

}
}


Aufzählungstypen (HK11 Aufg 9)

 
class Tiere{
   
 public enum ZooTier{Tiger, Ente, Schnecke;
 public boolean istGleichschnellWie(ZooTier tier){
 return (this == tier); 
 } 
 public boolean istSchnellerAls(ZooTier tier){
 return (((this == Tiger) && (tier != Tiger))
 | ((this == Ente ) && (tier == Schnecke)));
 }
 public boolean istLangsamerAls(ZooTier tier){
 return ((! this.istGleichschnellWie(tier) )
 & (! this.istSchnellerAls(tier)))  ;
 }
 }
 
 public static void main(String[] args) {
 System.out.println(ZooTier.Tiger.istGleichschnellWie(ZooTier.Tiger)); // true
 System.out.println(ZooTier.Ente.istSchnellerAls(ZooTier.Schnecke));  //true
 System.out.println(ZooTier.Schnecke.istLangsamerAls(ZooTier.Schnecke)); // false
 } 
 }

Mit Hilfe der Ordnungszahlen

class TiereOrd{

public enum ZooTier{Tiger, Ente, Schnecke;
public boolean istGleichschnellWie(ZooTier tier){
return (this == tier);
}
public boolean istSchnellerAls(ZooTier tier){
return (this.ordinal() < tier.ordinal());
}
public boolean istLangsamerAls(ZooTier tier){
return (this.ordinal() > tier.ordinal());
}
}


public static void main(String[] args) {
System.out.println(ZooTier.Tiger.ordinal());
System.out.println(ZooTier.Tiger.istGleichschnellWie(ZooTier.Tiger)); // true
System.out.println(ZooTier.Ente.istSchnellerAls(ZooTier.Schnecke)); //true
System.out.println(ZooTier.Schnecke.istLangsamerAls(ZooTier.Schnecke)); // false
}
}

Parametrische Objekte Hk 13 Aufg 7

class Cd {}
class  Wiedergabegeraet<P> {
 P medium; 
 public void mediumEinlegen(P med) {
 medium = med;
 System.out.println(medium);
 }
 public P mediumEntnehmen(){
 P tmp= medium;
 System.out.println(medium);
 medium = null;
 return tmp;
 }
 }
public class WiedergabegeraetDemo {
 public static void main(String[] args) {
 Wiedergabegeraet<Cd> player = new Wiedergabegeraet<Cd>();
 Cd cd = new Cd();
 player.mediumEinlegen(cd);
 Cd medium = player.mediumEntnehmen();
 }
 }

Parametrische Objekte Hk 13 Aufg 7 (mit Interface, Beschränkt parametrische Polymorphie)

interface Hoerbar{
 void liedSpielen(int liedNr);
 int anzahlLieder();
 }
class Cd implements Hoerbar {
public void liedSpielen(int liedNr) {

}
public int anzahlLieder(){
return 42;
}
} class Wiedergabegeraet<P extends Hoerbar> {
P medium;
public void mediumEinlegen(P med) {
medium = med;
System.out.println(medium);
}
public P mediumEntnehmen(){
P tmp= medium;
System.out.println(medium);
medium = null;
return tmp;
}
public void alleSpielen(){
for (int i=0;i<medium.anzahlLieder() ; i++) {
medium.liedSpielen(i);
} // end of for
}
} public class WiedergabegeraetDemo {
public static void main(String[] args) {
Wiedergabegeraet<Cd> player = new Wiedergabegeraet<Cd>();
Cd cd = new Cd();
player.mediumEinlegen(cd);
player.alleSpielen();
Cd medium = player.mediumEntnehmen();
}
}


Iterator Hk 13 Aufg 3

import java.util.ArrayList;
   import java.util.Iterator;
   import java.util.List;
   public class SchleifenDemo {
 public static void main(String[] args) {
 List<String> eineListe = new ArrayList<String>();
 eineListe.add("Alle");
 eineListe.add("meine");
 eineListe.add("Entchen");
 eineListe.add("...");
 schreiben(eineListe);
 }
 static void schreiben(List<String> liste) {
 // for-Schleife mit indiziertem Zugriff auf die Elemente.
 for (int i=0;i<liste.size() ; i++) {
 System.out.print(liste.get(i)+" ");
 } // end of for
 System.out.println();
 
 // for-Schleife, die Iterable<String> ausnutzt.
 Iterator it= liste.listIterator();
 for (it = liste.listIterator(0); it.hasNext(); ) {
 System.out.print(it.next()+" ");
 } // end of for
 System.out.println();
 
 // for-Schleife, die Iterable<String> ausnutzt mit for-each
 for (String s : liste ) {
 System.out.print(s+" ");
 } // end of for
 System.out.println();
 
 // while-Schleife mit indiziertem Zugriff auf die Elemente.
 int i=0;
 while (i<liste.size()) { 
 System.out.print(liste.get(i)+" ");
 i++;
 } // end of while
 
 System.out.println();
 // while-Schleife, die Iterable<String> ausnutzt.
 it= liste.listIterator();
 while (it.hasNext()) { 
 System.out.print(it.next()+" ");
 } // end of while
 
 }
 }

Threads (HK13 Aufg 8)

Geben Sie eine alternative Implementierung an, die dieses Problem vermeidet.

public synchronized Object entnehmen() { 
  Object letztes = gegenstaende.getLast(); 
  gegenstaende.removeLast(); 
  return letztes; 
}

Nk13, Aufgabe 10: Überschreiben und Überladen

public class Fuhrpark {
public static void main(String[]  args) {
LKW lkw = new Sattelschlepper();
PKW pkw1 = new PKW();
PKW pkw2 = new Kleinwagen();
Kombi kombi = new Kombi();
Sattelschlepper sattelschlepper =  new Sattelschlepper();
Super sup1 = new Super();
Super sup2 = new Sub();
sup1.m(pkw2, lkw);
sup1.m(pkw1, sattelschlepper);
sup1.m(kombi, pkw2);
sup2.m(pkw1, lkw);
sup2.m(pkw1, sattelschlepper);
}
}
class Super {
public void m(Fahrzeug t, LKW f) {
System.out.println("1");
}
public void m(Fahrzeug t1, Fahrzeug  t2) {
System.out.println("2");
}
}
class Sub extends Super {
public void m(PKW v, LKW f) {
System.out.println("3");
}
public void m(Fahrzeug t1, LKW t2) {
System.out.println("4");
}
}
class Fahrzeug {}
class LKW extends Fahrzeug {}
class Sattelschlepper extends LKW {}
class PKW extends Fahrzeug {}
class Kombi extends PKW {}
class Kleinwagen extends PKW {}
 

sup1.m(pkw2, lkw);
Ausgabe 1
erste Methode spezieller als 2. Methode

sup1.m(pkw1, sattelschlepper);
Ausgabe 1
erste Methode spezieller als 2. Methode

sup1.m(kombi, pkw2);
Ausgabe 2
nur 2. Methode passt

sup2.m(pkw1, lkw);
Ausgabe 4
In Super ist es Methode 1,
aber die wird in SUb durch Methode 4 überschrieben

sup2.m(pkw1, sattelschlepper);
Ausgabe 4
In Super ist es Methode 1,
aber die wird in SUb durch Methode 4 überschrieben

Nk11, Aufgabe 7: Methodenbindung & Ausnahmen

a.m(o1);
   Ausgabe B.m(Object o)
 
a.m(o2);
   Ausgabe B.m(Object o)
 
a.m(d);
   Ausgabe B.m(Object o)
a.m(s);
   Ausgabe B.m(String s)