# Softwareentwicklung ohne Objektorientierung - Wie geht das?



## Jay1980 (13. Aug 2009)

Servus,

ich lerne an der Uni objektorientierte Software-Entwicklung mit Anforderungsermittlung, Analyse, Grobentwurf, Feinentwurf usw..

Nun interessiere ich mich dafür, wie der Software-Entwicklungsprozess ohne Objektorientierung aussieht - gibt es da ein Buch darüber was ihr mir empfehlen koennt? Es gibt bestimmt diverse Programmierparadigmen mit denen man Software entwickeln kann, aber welche Vorgehensweise hat sich etwa für prozedurale Programmierung bewährt? 

Ich bin gespannt.


----------



## Noctarius (14. Aug 2009)

Die meisten OOP-Sprachen sind gleichzeitig Prozedurale Sprachen (Prozedurale Programmierung ? Wikipedia).

Eine entscheidende Unterscheidung von OOP-Sprachen bieten die Funktionalen Sprachen (Funktionale Programmierung ? Wikipedia).


----------



## tfa (14. Aug 2009)

Noctarius hat gesagt.:


> Die meisten OOP-Sprachen sind gleichzeitig Prozedurale Sprachen (Prozedurale Programmierung ? Wikipedia).


Nein, die meisten OO-Sprachen sind gleichzeitig imperativ. OO und prozedural ist ein Widerspruch.



> Eine entscheidende Unterscheidung von OOP-Sprachen bieten die Funktionalen Sprachen


Funktional und Objektorientiert schließt sich nicht aus. (Es gibt z.B. ein OO-Lisp).


----------



## Jay1980 (14. Aug 2009)

Servus,

ich meine damit, dass ich ja bei der OO ein Klassenmodell aus Anwendungsfällen und meinem gebrauchten Objektgeflecht immer weiter zusammenschuster und dass dann transformiere. 

Jetzt ist es ja so, dass bei der imperativen Programmierung, vor allem in Variablen gespeichert wird, da haette mich jetzt eben nun interessiert, wie die dann zu ihrem System kommen, Klassenmodelle wird es da ja nicht geben, wie hält man da den Überblick, wie transformiert man da - das war es, was mich interessiert. 

Habe auch schon ein Buch (als PDF verfügbar) gefunden, da ist ein Beispiel drin, wenn ich da auch noch auf weiteres Material hoffe.
www.asc.tuwien.ac.at/eprog/download/schmaranz.pdf


----------



## maki (14. Aug 2009)

> ich lerne an der Uni objektorientierte Software-Entwicklung mit Anforderungsermittlung, Analyse, Grobentwurf, Feinentwurf usw..


Riecht nach Wasserfallmodell/V-Modell/Lemmingmodell.



> Jetzt ist es ja so, dass bei der imperativen Programmierung, vor allem in Variablen gespeichert wird, da haette mich jetzt eben nun interessiert, wie die dann zu ihrem System kommen, Klassenmodelle wird es da ja nicht geben, wie hält man da den Überblick, wie transformiert man da - das war es, was mich interessiert.


Du meinst Prozedurale Programmierung.
Im Prinzip ist die Analyse nicht so unterschiedlich, aber dass eben Verhalten und Daten getrennt werden, oft fängt man mit dem Datenmodell (ER Modell) an, dann kümmert man sich um das Verhalten. Fluss Diagramme etc., also vieles aus der Pre-UML Zeit kann da genutzt werden.


----------



## Landei (14. Aug 2009)

Es gibt weiterhin logische oder deskiptive Sprachen (Prolog, Q), stackbasierte Sprachen  (Forth, Joy, Cat) und ziemlich seltsame "esoterische" Sprachen (brainfuck, Malbolge, INTERCAL, BeFunge...), siehe dazu auch Cat's Eye Technologies: Esoteric Topics in Computer Programming . Dann gibt es noch Sprachen, die zwar prinzipiell "OO" sind, dieses Konzept aber mehr oder weniger verallgemeinern und/oder mit anderen Konzepten verquirlen (Beta)


----------



## NDEBUG (14. Aug 2009)

Wenn ich deine Frage richtig interpretiere fragst du "wie kann man ohne Klassen" programmieren und das klingt natürlich irgendwie komisch für jemanden der sehr viel Erfahrung mit C hat (das Schmaranz Buch ist übrigens gut, wenn man da ein bißchen Einblick braucht).
Also wo fange ich an? Hmm, bevor ich mir hier jetzt die Finger wund schreibe, warte ich ma lieber noch ma ein Feedback von dir ab, ob ich deine Frage richtig verstanden hab.


----------



## musiKk (14. Aug 2009)

Landei hat gesagt.:


> Es gibt weiterhin...



Etwas OT: Wer sich hier für Paradigmen interessiert, der kann sich mal das bei LtU verlinkte Paper  Programming Paradigms for Dummies ansehen. Dort werden iirc 26 Paradigmen erwähnt.


----------



## Jay1980 (18. Aug 2009)

NDEBUG hat gesagt.:


> Wenn ich deine Frage richtig interpretiere fragst du "wie kann man ohne Klassen" programmieren und das klingt natürlich irgendwie komisch für jemanden der sehr viel Erfahrung mit C hat (das Schmaranz Buch ist übrigens gut, wenn man da ein bißchen Einblick braucht).
> Also wo fange ich an? Hmm, bevor ich mir hier jetzt die Finger wund schreibe, warte ich ma lieber noch ma ein Feedback von dir ab, ob ich deine Frage richtig verstanden hab.



Ja das hast du richtig verstanden, ich habe schon mal etwas geschaut, im Schmaranz Buch ist auch das Beispiel mit einem Kaffeeautomaten, aber wenn mir da einer mit Erfahrung kurz sagen will, was ihm durch den Kopf geht, wenn er Software in C bauen, nur zu. Ich werde es gespannt lesen und vielleicht ist es ja eine passende Grundlage, wenn ich mir mal ein in C geschriebenes Programm anschaue und verstehen will.


----------



## Antoras (19. Aug 2009)

OOP ist nur ein Konzept nach dem man programmieren kann - es ist dabei nicht auf eine Sprache bezogen. Java beispielsweise stellt syntaktischen Zucker bereit, der einem Menschen das Programmieren vereinfacht und einem Menschen vor allem ermöglicht vom Denken einer Maschine wegzukommen. Dies bedeutet aber keinesfalls, dass man in C nicht auch objektorientiert programmieren kann. Es mag manchmal ein wenig "fricklig" sein und objektorientierte Stilmittel wie Kapselung sind nicht hundertprozentig umsetzbar - aber es geht. 

Dein Compiler macht im Grunde auch nichts anderes als dein OO-Programm in den Code umzuwandeln, der von deinem Computer verstanden werden kann.

OO bedeutet in vieler Hinsicht etwas zu programmieren, bei dem im Vordergrund steht _was_ gemacht und nicht _wie_ dies getan werden soll.


----------



## NDEBUG (22. Aug 2009)

Jay1980 hat gesagt.:


> wenn ich mir mal ein in C geschriebenes Programm anschaue und verstehen will.



Hier ein paar Tips zum Verstehen von C Programmen. Ich setze mal vorraus, daß du die Sprache an sich verstehst und auch mit Pointern usw. keine Probleme hast. Nach dem Schmaranz Buch solltest du aber kein Problem haben Pointer, Datenstrukturen, Funktionspointer usw. zu erkennen und zu verstehen.

1. Schau dir die ".h" Dateien an. Hier werden alle Deklarationen, Definitionen, etc. vorgenommen die ein Modul nach außen exportiert. Zum guten Programmierstil in C gehört, daß zu jeder Quellcodedatei ".c" auch eine Headerdatei ".h" gehört. In dieser Headerdatei findest du alle Funktionsdeklarationen, Definitionen, Structs, Enums, etc. die von anderen Programmteilen gebraucht werden, um mit diesem Speziellen Modul arbeiten zu können. Jede Funktion die hier nicht deklariert wurde, aber in der zugehörigen ".c" Datei implementiert ist, ist nach außen nicht sichtbar und ist nur zur Erledigung von Aufgaben innerhalbs des Moduls gedacht.

2. Schau besonders auf die komplexen Datentypen! Also auf die structs gucken. In großen Programmen dreht sich nahezu alles um die structs. Das sind wenn du so willst deine Klassen mit den Instanzvariablen. Schau dir an welche Variablen im struct sind und auch besonders ob und was für pointer darin enthlanten sind.

3. Hast du einen Überbklick über ein struct schaust du dir die Funktionen, die damit zusammenhängen an (die die nach außen exporiert werden und in der ".h" stehen). Damit solltest du nun auch ein Überblick haben, wie der Programmierer sich das Arbeiten mit seiner Datenstruktur gedacht hat. Gleichzeitig solltest du damit auch rausfinden wie der Programmierer eine eventuelle Collection mit der Datenstruktur umgesetzt hat. (LinkedList, Stack, Maps, etc. sind in C noch Handarbeit!)

4. Nun wenn nicht bereits geschehen, schaust du dir die ".c" Datei an. Hier findest du nun die Implementierung im Detail. Außerdem eventuell nötige Hilfsstrukturen, die zum Ausführen der Aufgabe intern benötigt werden.

5. Jetzt gehst du zur nächsten ".h" Datei und machst das ganze wieder und so weiter. Wenn du durch alle Programmteile durch bist, solltest du nun ein gutes Verständnis für die einzelnen Teile haben und das Bild wie das Programm aufgebaut ist und die verschiedenen Teile miteinander vernetzt sind sollte sich vervollständigen.

6. Geh den Programmablauf Schritt für Schritt durch. Jetzt wo du die wichtigen Teile kennst, sollte der Programmablauf leichter verständlich sein.

Absolut notwendig um fortgeschrittene C-Programme zu verstehen sind verschiedene Elemente. Du solltest generell die Sprache kennen. Dich mit Funktionspointern wohlfühlen. Datenstrukturen, wie Listen, Maps, Hashing, Ressourcebanken usw. sollten dir nicht fremd sein. Callbacks, Events, Mappings sind auch alles Sachen, die in C Programmen sehr häufig Verwendung finden.


----------

