Software Entwicklung 2 – 3

Abstrakte Klassen

bei Handschrift in Klammern einschließen.
sobald eine abstrakte Methode, ist die Klasse als abstrakt zu kennzeichnen.

Interfaces

nicht static (weil static methoden statisch gebunden sind; d.h sie können nicht überschrieben werden)
auch Konstanten erlaubt (eher selten);

Interface Methoden können implementiert oder geerbt werden, durch abstrakte Methoden implementiert werden.

typtest: instanceOf()

in UML <<interface>>

Subclassing vs Subtyping
Subclassing: “Codevererbung”
Subtyping: “Schnittstellenvererbung”; zB Interfaces

Werden verwendet um unverwandte Klassen gleich behandeln zu können.

Interfaces vs. abstrakte Klassen:
Abstrakte Klassen können auch konkrete Methoden und Datenfelder enthalten; Interfaces nicht
Abstrakte Klassen erlauben keine Mehrfachvererbung

Interface compeareTo; negative 0 oder positiv
Interface Comparator;  Wenn man Objekete vergleichen will deren Klasse nicht Comparable implementiert.
Interface java.lang.Runnable
Macht eine Klasse zu einem Thread
 

Algo 1 – 3

Bestandteile des Anfangs- und Endzustands

Vorsicht bei globalen Variablen – side effects.

Eingangs-, Ausgangs- und Übergangsgröße

Übergangsgrößen werden geändert  Eingangsgrößen werden benutzt

Ausgangsgrößen werden erzeugt    irrelevant, hat in der Spezifikation nichts zu suchen

Dateien als Bestandteile der Schnittstelle
Dateiname
Pfad
Format
Dateistruktur
Satzaaufbau
Feldinhalte: Datentypen, Wertebereiche, Bedeutung

Zustands- und Überführungsschema
Eingabe -> f -> Ausgabe
salopp Eingabe + Funktion = Ausgabe
Aus zwei Teilen ergibt sich der dritte.

Zustandsschema:
statisch
gegebene Eingabe und gewünstche Ausgabe
Wie scheint nicht auf; abstrakt; Implementierer erfüllt Lücke;
schwierig zu spezifizieren (alle zustände sind anzugeben);
z.B: p,q e ℝ; ges.: x…..
wenn Anfangs- und Endzustand gut formal beschrieben werden können; es nur wenige Wege zum ZIeel gibt.

Überführungsschema:
gegebene Eingabe und auszuführende Funktion
dynamisch; Ausgabe ergibt sich aus Funktion
Beschreibt den Weg
oft genauer
Sonderfälle leichter zu erkennen
Gibt Hinweise auf den Lösungsweg
Gefahr der Überspezifikation; Beschränkt Implementierer; kann bessere Lösungswege vereiteln
Beispiel: Lösungsformel quadratische Gleichung
wenn Aktion wichtiger als Ergebnis

In der Praxis oft vermischung der 2 Formen

Abstraktionsgard:

verbal ——————————- formal
Ungangssprache unscharf                mathematische Ausdrücken präzise
mehrdeutig                                         eindeutig, widerspruchsfrei
verständlich                               schwer verständlic
(Hausverstand) (Experten)
ausschweifend knapp

Beispiel
oder: umgangsprachlich (exklusiv), mathematisch(inklusiv)
bei Wind und Regen oder Schnee

Algorithmen mit Gedächtnis
weichen von klassischer Definition ab

Trennung in zwei Funktionen
1. Berechnung des Ergebnisses
2. Berechung des Folgezustands (Zustandsüberführungsfunktion)

Mealy vs Morreautomaten

Wie wird der Anfangszustand eingestellt?

Wie wird der Zustand von Aufruf zu Aufruf gerettet?

statische vs. dynamische Variablen
dynamisch: bei Prozedureintritt erzeugt, danch undefiniert
statisch: bei Porgammstart erzeugt; von Prozeduren unabhängig

lokal vs globale Variablen
lokal: nur in der aktuellen Prozedur bekannt
global: überall bekannt

Dynamische Voribalen sind immer lokal
Globale Variablen sind immer statisch
Lokale Varablen können auch statisch sein.

Lokale statischen Variablen in Jana:
A(….) {
static int x = 0 // Wertzuweisung passiert nur einmal

}

Zustandsgrößen in realen Progarmmierprachen (in Jana-Notation dargestellt)
in C, C++ wie in JANA

in Java: außerhalb des Algorithmus in der Klasse
ein privates Gedächtnis nur für einen Algorithmus in Java nicht möglic

(6) Ideal in objektorientierten Sprachen

Algorithemn mit Gedächtnis haben “side effects”
Wirkung Größen, die nicht in der PArameterleste aufscheinen
Reihenfolge der Aufrufe können eine Rolle spielen

if (A()&&B() || !A()&&!B()) {…}
problematisch wenn A() od. B() mit Gedächtnis sind und Zustand wechseln
sicherheitshalber in Variable zwischenspeichern

Komplexität

Komplexität =? Aufwand
Auffasungen in der Informatik: Laufzeit, Seicher, Struktur Komplexität
Hier: Laufzeitkomplexität Laufzeit t = f(n)
n: Problemgröße

n
eine ganze Zahl, charakterisiert den Umfang der Aufgabe
typisch: Menge zu verarbeitender Daten (z.B Länge eines Textes oder Feldes)
bei numerischen Aufgaben auch:
Stellenanzahl von Zahlen

Komplexität eines gegebenen Algorithmus
Wie verhält sich die Laufzeit des Algorithmus in Abhängigkeit von der Problemgröße?
Auch zum Verglich mehrerer Algorithmen:
Welcher ist (für welche Problemgrößen)schneller?

Komplexität eines Problems
Gibt es eine Schranke die nicht unterboten weredn kann?

Laufzeitanalyse
Grobanalyse; Feinanalyse
Grazanalyse ist von Sprache und Maschine unabhängig

 
 

 

 

 

 

 

 

 

 
 

Elektronik Vorlesung 3

Grundlagen C

Spannung zwischen zwei Klemmen, Widerstand; Strom fängt zu fließen an; Spannung am Widerstandn sinkt

Q=CU

Kondensator ist die Anordnung; Kapazität ist ..
Einheit ist Farad
Farad ist As/volt ??

i(t) = C * (duc(t)/dt)

An einer Kapazität kann die Spannung nicht springen
100 Prozent geladen ist eine Kapazität erst im unendlichen

Differenzialgleichung
Uq = RC*(duc(t)) /(dt) + uc(t)
-> DGL

Lösungsansatz uc(t) = A*exp(B*t) + D
uc(t = 0) =0
Endbedingung uc(t= undendlich) = Uq Leerlauf

duc(t)/dt = AB*exp(B*t)

Herleitung von uc(t) = -Uq*exp(-t/RC) + Uq = Uq(1-exp……….Prüfungsrelevant

Kapazitäten verantwortilch für beschränkungen in Digtaltechnik (timing, Prozesszr, GHZ) Transistoren haben Kapazität.

Strom identisch beim Laden und Entladen der Kapazität

Kapazität in Serie wie Widerstand parallel
Kapazität prallel wie Widerstand in Serie

MOSFET Transistor
NMOS und PMOS Transistor
p = Löcher ?
n =Elektronen ?

L = Kanallänge

Softwareentwicklung 2 Übung – 2

Dynamische Bindung,

statt super kann man
this.bla = bla; abkürzen

@Override
toString()
hashCode()
equals(Object other)

Eclipse kann hashCode() und equals() erzeugen
protected

zur Übung
Simulation; Prozesse und Ressourcen

worker

private static final long WORKTMME_MIn = 10;

 

protected Wker(String name) {
super(name);

 

zlublic void drill() {

wait(rand(WORTIME_MIN, WoRTIMe_MAX”)” “drillingn”)j

}

}

Drilling
exectue() {

Worker machine = requent(Worker.class);
Driller drille = requst(drille.class);
worker.drill
drilll….

KFZ Werkstätte
Reperatur
5-10 Sek
5-10 Mst
120-140 HB,Geselle
5-10 Mst
5-10 Sek

 

 

Softwareentwicklung 2 – 2

Vererbung

Baustein wiederverwenden passt nicht genau
programming by difference

vererbt: methoden, felder
nicht vererbt: Konstruktor (man kann aber super callen super(h, m, s))
private Felder werden unsichtbar vererbt

pulic class ClockTimer extents Timer

gleiche Signatur heißt überschreiben
man kann aber super Methode noch aufrufen super.bla(foo) (super.super.bla(foo)) geht nicht

autom. super-calls: wird automatisch eingefügt A() wird immer aufgerufen auch wenn superklasse keinen hat -> Fehler -> Lösung superklasse explizit aufrufen: A(bla,foo,bar)

Datenfelder können überschrieben werden. super.bla kann noch angesprochen werden (überschreiben von feldern ist nicht sinnvoll, lieber andere Namen geben)

protected: etwas lockerer als package, in allen Unterklassen noch sichtbar; Aufhebung des Information Hiding

Klassen kompatibel machen

Vererbung ist transitiv
Vererbung ist eine ist-Beziehung

Vererbung bedeutet Typerweiterung
Vererbung bedeutet Typspezialisierung

static type vs dynamic type
Timer timer = new ClockTimer(0,1,30,12)
Timer = statischer Typ; ist dem Compiler bekannt, bestimmt welchen Elemente der Klasse sichtbar sind
ClockTimer  = dynamischer Typ; dem Compiler unbekannt; Bestinmmt welche Methode aufgerufen wird

Typedescriptor; unsichbares Feld; kannn über timer.getClass(); angesprochen werden; Informationen über Klasse

Abrgrage des dynamischen Types zur Laufzeit
instanceof(bla)
Typumwandlung(TypeCast)
(ClockTimer)timer = if (timer instanceof ClocTimer || itmer == null)……
else throw new ClassLastExcetion() //geprüft!

Mehrfach Vererbung
nicht unterstüzt; namenkonflikt; deadly diamond of death, Ineffizienz, komplexe Klassenhirachie

Klasse Object
Basisklasse

Dynamische Bindung
zur Laufzeit wird entschieden welche Methode wirklich aufgerufen wird

Überschriebene Felder werden statisch gebunden

 

 

Algo Übung 1 – 1

Darstellungsarten von Algorithmen

Umgangsprache
jeder verstehts; unbegrenzte Ausdrucksmöglichkeiten
nicht eindeutig, schwer umsetzber (kein Complier vorhanden)

Stilistierte Prosa
anandereiung Schritte; nur ein Ende
Aktionen besser erkennbar
Struktur nicht sichtbar

Beispiel
Sieb des Eratosthenes

Prosa:
S1: Initialisierung: Erzeuge Feld sieve[1:n-1] vom Typ boolean und setze ale Werte auf true.
S2: 10ausstraicheen: setzee sieve[1] <- false undsetze i -2
S3: Aussieben: setze alle Felder in sieve, deren index ein Viefaches von i sit (und die kleiner als n sind) aus false
S4: Vorrücken: setze i auf den nächtses index eines Feldes, dessen Inhalt true ist ung gehe zu S3. Is kein weiteres true-Feld vorhanden, gehe zu S5
SR: Ausgabe: durchlaufe das Feld sive und gib jene Indizes i aus, in dessen zugehörgen Felder der Wert true steht

Ablaufdiagramm:
Graphische Darstellung
Symbole (Aktionen)
Pfeile (Steuerfluss)

siehe Folien für Darstellung

Struktugramm
zwingen zur besser Strukturierung
schwer zu erstellen

Algorithmenbeschreibungssprache
Jana
Halbformale Beschreabungsweise

Algorithmus Kopf und Aufruf
Name des Algorithmus
Pfeile für EIngangs-, Ausgangs- und Übergangs-Parameter
….

Programmiersprache
exakt
es kommt auf jedes Symbol an
gute Programmiersprachen erlauben die einfache LEsbarkeit von Algorithmen
Parametiertypen können weggelassen weren falls eindeutig
keine Breakanweisung bei switch
for (i e α) //element
immer int, float
final (für Konstanten)
static (für Gedächtnis)
int[1:n] feld1
int[-2:] größe unbestimmet oberer index k
int feld3[] 0 bis unendlich
type Month =(1..12) nur 1 bis 12 erlaubt

Wichtig für Übung
Lokale Variablen immer deklarieren
Arrays können auch mit char indiziert werden
for – Schleife sehr flexibel // sets definieren
repeat { read(ch eof) } until (eof)

 

 

Algo 1 – 2

Abstraktionsschichten

Black Box: von Außen, z.B in der Zukunft zu entwickelnn
Grobstruktur: Lösungsidee
Detail: für Algorithmusanalyse

Black Box
Beispiel Median (sort wird nicht erklärt)

Grobstruktur
sort(liste n) {
for (i=l…n-l) {
Suche das kleineste Element listen[k] in liste [i:n]
Vertausche liste[k] mit liste[i]
}
}
kommt Lösung näher
Veranschaulicht das Verfahren, lässt Implementierungsdetails aus.

Detailsicht
Ausforulierung der informell gehaltenen Teile:
sort(liste n) {
for (i=l..n-l) {
k=i
for (j=i+l…n) {
if (liste[j] < liste [k]) { k = j}
}
liste[k]<-> liste [i] // <-> Vertauschungsauktion
}
}

Welche Abstraktionsschicht für welchen Zwech?

Common Mistake: zu viel Detail am Anfang
Grundregel: so abstrakt wie möglich denken, nicht mehr Details als nötig

Black Box: Betonung des Schnittstellenaspekts; wie soll der Algorithmus benutzt werden; Vision

Grobstruktur: für die ersten Enwurfsschitte; erklären;

Detail: genauer Ablauf, Sprach- oder Maschinendetails

Bestandteile von Algorithmen
Was sind unsere Atome?

for vs while
for- und while-schleife sind sematisch äquivalent.

Semantische Äquivalenz

for- und while-Schleife heißen semantisch äquivalent wenn gleiche Anfangs und Folgezustände.

ZFA -> FS -> ZFE und ZWA -> WS -> ZWE gilt:
………….

switch/case = Kaskade von if
if-Kaskade langsamer
trotzdem semantisch Äquivalent; nur Wirkung zählt

Benötigte Bausteine
1. Elementaraktion

Aktion kann sein:
Zweisung: x = ausdruck
E/A-Anweisung: read(war eof); write(wert)
Ausfruf: sort(liste n)
nichts: {} leere Anweisung

2. Sequenz
Schritte

3. Binäre Verzweigung
Bedingung, ja nein, kommt am Ende wieder zusammen, neinzweige dürfen leer sein

4. Abweisschleife
while Schleife; eso lange Bedingung erfüllt ist, Inhalt 0 oder mehrmals ausgeführt.

D-Diagramm (D nach Dijkstra)
die oben gennanten 4 Bausteine reichen um alle Algorithmen zu formulieren -> Ablaufdiagramme heißen D-Diagramme.

Gegensatz: Spaghetti-Struktur (Sprungmarken)

Beweis (nach Knuth)
Zerlegung in Blöcke, Nummerierung, state,
while sate != 0 – swictch case state 1, state 2 state 3,
jana hat kein break

Eigenschaften
nur noch eine Schleife
einzelne Fälle enthalten nur noch Sequenzen (eventuell binäre Verzweigung am Ende)
Funktiontiert für jeden Algorithmus
Für Praxis nicht geeignet, notfalls für C-Programm mit goto -> Java

?andere Formen: Codeverdopplung

Beispiel: n+1/2 Schleife

while (true) { //endlos
Lesen
if (Ende) {break}
Verarbeiten
}
Codeverdopplung:

Lesen
while (!Ende) {
Verarbeiten
Lesen
}
Unangenehm: schwer zu warten; unlogisch

Schaltervarible:

nochDaten = true
while (nochDaten) {
Lesen
nochDaten =! Ende
if (nochDaten) {Verarbeiten}
}
unangenehm: 2 Prüfungen für nochDaten

Spezifikation

Zweck
Schnittstellenbeschreibung
Aufgabenbeschreibung
….

Spezifikation

 

Spezifikation | Entwurf Implementierung Test (40 Entwurf, 20 Implementierung, 40 Test)
Dokumentation

mit Lösungsideen  anfangen, verennen dokumentieren, testen dokumentieren ausbessern dokumentieren

Spezifikationsdokument (Vertrag)

Was soll eigentlich eentwickelt werden?
Worauf ist zu achten?
Was kann vorausgesetzt werden?
Was gilt als richtig, was als falsch?

Der Begriff “Spezifikation”
Salopp: Aufgabenstellung
Dokument: Anfordungsdefinition, Pflichtenheft
juristisches Doukment
von Vertragspartnern gemeinsam verfasst (Auftraggeber, Entwickler)

Spezifikation          Implementierung
Aufgabe – Lösung
WAS? – WIE?
von außen – von innen
Black box – Details
Schnittstellen – Algorithmen

Eigenschaften guter Spezifikation
einfach: kein Farchjargon
eindeutig: verdammt schwierig
vollständig:kein Interpretationsspielraum in wesentlichen Punkten
minimal: kei “Wie” behandeln

Funktionale Anforderungen: Was
NichtFunktionale Anforderungen: Qualitätskriterien

funktionale Anforderungen
Was?
Ausgabe…
bla….

Teile Schnittstellenbeschreibung
Aufrufschnittstelle
Parameter
Systemzustand
Dateien
Geräte
Systemumgebung: welche Klassen dürfen nicht benützt werden?
Benutzerschnittstelle

Programm vs Prozedur
Programm: selbständig ablauffähig; Anwendersicht
Prozedur: bestandteil, nicht ablauffähig;

Schnittstellen von Prozeduren
Aufruf -> Parameter ->Prozedur (liefert Daten zurück)??
Variablen ??l
Dateien <-> Prozedur??
Systemumgeben <-> Prozedur??

Prozedur
Aufgabe: stichwortartige Beschreibung (eine Zeile, kurz, pregnant)
Aufruf: Name, Parameter, Funktionswert
Eingangsgrößen: Eingangsparameter mit ihren Datentypen und ihre Bedeutung
Ausgangsgrößen: Ausgangsparameter wie Eingangsgößen
Funktion: wie steheln Eingang und Ausgangsrößen in verbindung
Fehler: was tun bei Fehler?

Folgerungen
ZA muss zur Lösung reichen
Der Algorithums darf sonst nichts ändern
keine Annahmen (ausserhalb der Spezifikation)
idealerweise Sicherheitsprüfung

 

TRASH ATTACK

15 MÄRZ 2011 21Uhr

KAPU

KONUS KALMANDA live

außerdem

A.T.M.(automated trash machine)

MC BROKO

SE MUSTARD TERRORISTS

DJANE BOT

LIVE PERFORMANCE by unnamed people

VOLXKÜCHE DELUXE

http://www.kapu.or.at/event/2012/03/15/trash_trash_trash

http://negativtower.tumblr.com/