Programmieren 1 - Strukturen - Klassen - Objekte

Programmieren 1 - Strukturen - Klassen - Objekte Programmieren 1 - Strukturen - Klassen - Objekte

01.03.2014 Aufrufe

Funktionsorientierte Programmierung (Veraltet) FB Informatik Prof. Dr. R.Nitsch // Fraction.h #pragma once struct Fraction { int z,n; }; Fraction add(Fraction op1, Fraction op2); Fraction subtract(Fraction op1, Fraction op2); // … Domäne des Systemprogrammierers Domäne des Anwendungsprogrammierers // Anwendung: Rechnen mit Brüchen #include "Fraction.h" int main() { Fraction frac1, frac2, sum; frac1.z=1; frac1.n=2; // kein Zugriffsschutz frac2=set(frac2,3,4); sum=add(frac1,frac2); // … // Fraction.cpp #include "Fraction.h" Fraction add(Fraction op1, Fraction op2) { if(op1.n==0||op2.n==0) // PRE exit(1); // aborts program Fraction result; result.z = op1.z*op2.n+op1.n*op2.z; result.n = op1.n*op2.n; return result; } Fraction subtract(Fraction op1, Fraction op2) { /* … */ } // … Fraction set(Fraction op,int num, int denom) if(denom==0) exit(1); // PRE op.z=num; op.n=denom; return op; } Versuch einer kontrollierten Zustandsänderung - umständlich (3 Parameter) - unverbindlich (direkter Zugriff möglich) 22.04.2013 2

Funktionsorientierte Programmierung und ihre Nachteile FB Informatik Prof. Dr. R.Nitsch Funktionsabstraktion Bruch-Anwendung aus Praktikum-Aufgabe 2 ist ein Beispiel dafür Merkmale: Programmstrukturierungsmittel sind Daten zur Zustandsspeicherung und getrennt davon die auf sie angewendeten Funktionen. Nachteile: ‣Daten können ohne Initialisierung benutzt werden ‣Daten können falsch initialisiert sein. Ausschließlich der Programmierer ist verantwortlich. ‣Daten müssen den Funktionen übergeben werden. ‣Daten und Funktionen können beliebig im Programm verteilt sein (schlecht für Fehlersuche, Wiederverwendung, Änderungen) ‣Bei Änderungen in der Datenstruktur (z.B. andere Bezeichner, Datentypen oder Codierung) müssen alle Anwendungsprogramme, die diesen benutzerdefinierten Typ benutzen, geändert werden. Abhilfe: Datenabstraktion (Abstrakter Datentyp, Klasse, Datenkapselung) 22.04.2013 3

Funktionsorientierte Programmierung (Veraltet)<br />

FB Informatik<br />

Prof. Dr. R.Nitsch<br />

// Fraction.h<br />

#pragma once<br />

struct Fraction {<br />

int z,n;<br />

};<br />

Fraction add(Fraction op1, Fraction op2);<br />

Fraction subtract(Fraction op1, Fraction op2);<br />

// …<br />

Domäne des Systemprogrammierers<br />

Domäne des Anwendungsprogrammierers<br />

// Anwendung: Rechnen mit Brüchen<br />

#include "Fraction.h"<br />

int main() {<br />

Fraction frac1, frac2, sum;<br />

frac1.z=1; frac1.n=2; // kein Zugriffsschutz<br />

frac2=set(frac2,3,4);<br />

sum=add(frac1,frac2);<br />

// …<br />

// Fraction.cpp<br />

#include "Fraction.h"<br />

Fraction add(Fraction op1, Fraction op2) {<br />

if(op1.n==0||op2.n==0) // PRE<br />

exit(1); // aborts program<br />

Fraction result;<br />

result.z = op1.z*op2.n+op1.n*op2.z;<br />

result.n = op1.n*op2.n;<br />

return result;<br />

}<br />

Fraction subtract(Fraction op1, Fraction op2)<br />

{ /* … */ }<br />

// …<br />

Fraction set(Fraction op,int num, int denom)<br />

if(denom==0) exit(1); // PRE<br />

op.z=num; op.n=denom;<br />

return op;<br />

}<br />

Versuch einer kontrollierten Zustandsänderung<br />

- umständlich (3 Parameter)<br />

- unverbindlich (direkter Zugriff möglich)<br />

22.04.2013 2

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!