Programmieren 1 - Strukturen - Klassen - Objekte
Programmieren 1 - Strukturen - Klassen - Objekte Programmieren 1 - Strukturen - Klassen - Objekte
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
- Seite 1: FB Informatik Prof. Dr. R.Nitsch Pr
- Seite 5 und 6: Funktionsorientiert versus Objektor
- Seite 7 und 8: Funktionsorientiert versus Objektor
- Seite 9 und 10: Unified Modelling Language (UML) FB
- Seite 11 und 12: Praktikumsaufgabe 2: string toStrin
- Seite 13 und 14: Hörsaalübung "Eine Motorbootfahrt
- Seite 15 und 16: Hörsaalübung "Eine Motorbootfahrt
- Seite 17 und 18: Struktur und Syntax einfacher OO-Pr
- Seite 19 und 20: Ein einfaches Beispiel - Datentyp C
- Seite 21 und 22: Überladene Methoden/Funktionen FB
- Seite 23 und 24: Vorgegebene Parameterwerte und vari
- Seite 25 und 26: Methoden verwenden (andere) Methode
- Seite 27 und 28: Beispiele Objekt a1 KlasseA Objekt
- Seite 29: Konzept der friend-Funktionen FB In
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