Funktionale Programmierung, OO- Programmierung, ...

Generic1

Top Contributor
Hallo,

ich muss mich in nächster Zeit mit Erlang beschäftigen und weiß bis jetzt nur, dass es einen funktionale Programmiersprache ist.
Ich hab mir jetzt den Wikipedia- Artikel über Erlang durchgelesen, bin aber nicht schlauer geworden, was der Unterschied zwischen einer funktionalen und einer oo- Programmiersprache ist,
Könnte das vielleicht jemand erklären, was da der Unterschied ist?
Vielen Dank und lg,
Generic1
 

tfa

Top Contributor
bin aber nicht schlauer geworden, was der Unterschied zwischen einer funktionalen und einer oo- Programmiersprache ist,
Könnte das vielleicht jemand erklären, was da der Unterschied ist?

Das eine schließt das andere nicht aus. Es gibt durchaus objektorientierte, funktionale Sprachen. Objektorientiertheit ist einfach nur ein "Feature", das grundsätzlich imperative und funktionale Sprachen haben können (bestimmt auch logische, aber da kenn ich mich nicht aus).
 

Purgator

Aktives Mitglied
Aloha,
ich versuche mich mal an das Semester zu erinnern wo ich prolog (logisch) und haskell (funktional) hatte.

Also bei rein funktionaler programmierung gibt es z.B. keine Schleifen. Du musst alles was du damit machen wollen würdest mit rekursion lösen. und globale Variablen dürfte es imho auch nicht geben, glaube die wurden höchstens als Parameter übergeben... bin mir da aber nicht mehr 100%ig sicher.

Logische Programmierung ist mein Nemesis, habe nie verstanden warum die nicht das machen wollten was ich ihnen sagte... fand mein Quelltext schon logisch. Dazu kann ich dir nicht viel Sagen ausser das die halt nach regeln irgendwas berechnen. Z.b. das Einsteinrätsel kann damit einfach gelöst werden. Du gibst halt die vorbedingungen und dann die Hinweise ein. Mittels logischer Verknüpfungen findet dann das Programm automatisch die Lösung.

Hoffe ich habe nicht irgendeinen Müll erzählt, aber nach meinen Erinnerungen war das alles so...
 

Landei

Top Contributor
In funktionalen Sprachen sind natürlich Funktionen die grundlegende Abstraktion (beim grundlegenden Lambda- bzw. SKI-Kalkül gibt es nur Funktionen, nichts anderes, und auch Werte wie Zahlen werden daraus aufgebaut - aber in der Praxis geht das zu weit). Das schließt ein, dass Funktionen selbst Argumente anderer Funktionen sein können, aber das ist nichts besonderes mehr, wo fast alle modernen OO-Sprachen soetwas (meist als "Lambda" oder "Closure") unterstützen - mit der prominenten Ausnahme von Java.

Funktionen in funktionalen Sprachen sollen möglichst Seiteneffekte (z.B. IO, Systemzeit, Zufallszahlen) vermeiden, also immer dasselbe Ergebnis liefern ("referentielle Integrität"). Sprachen wie Haskell und Clean erzwingen das sogar durch ihr Typsystem ("pure Sprachen"). Damit Hand in Hand geht die Bevorzugung unveränderlicher Datentypen: Einer Liste in Haskell kann man nichts hinzufügen, man lässt sich stattdessen eine neue Liste mit dem zusätzlichen Element zurückgeben. Das hat wiederum weitreichende Folgen für die Optimierung und Parallelität (in Erlang basiert das Aktor-Modell auf der Unveränderlichkeit der Botschaften).
 

Geeeee

Bekanntes Mitglied
Funktional kann man schon einmal "sehr vereinfacht, aber verständlich" so ausdrücken:
Streng funktionale Programme besitzen "nur" Funktionen, die einer Abbildungsvorschrift folgen (ja, wie in der Mathematik)
D.h. eine Funktion X bildet z.B. Integer und Integer auf einen Integer ab (z.b. Addition). Natürlich bleibt es in den Tiefen der Funktionalen Programmierung nicht dabei.
Noch einfacher: Funktionale Programmierung besitzt einen großen Teil an Listenschieben für Fortgeschrittene :)
 

Generic1

Top Contributor
Ok, Funktionen als Funktionsparameter -> damit hab ich nur in JS gearbeitet -> Prügelt mich wenn das in JS wieder ganz anders funktioniert wie in anderen Programmiersprachen.
Für das kommende Projekt muss ich mich auch in Scala einarbeiten.
Anscheinend bietet Scala auch so was wie Closures und Concurrency out of the Box.
Könnt ihr das bestätigen?
lg
 

Andi_CH

Top Contributor
ich muss mich in nächster Zeit mit Erlang beschäftigen und weiß bis jetzt nur, dass es einen funktionale Programmiersprache ist.
Ich hab mir jetzt den Wikipedia- Artikel über Erlang durchgelesen, bin aber nicht schlauer geworden, was der Unterschied zwischen einer funktionalen und einer oo- Programmiersprache ist,
Könnte das vielleicht jemand erklären, was da der Unterschied ist?

Meines Erachtens gibt es eigentlich keine OO Programmiersprachen (na ja, es gab mal SmallTalk, aber das Thema lassen wir mal beiseite)
OO Programmierung ist ein Konzept und keine Sprache denn grundsätzlich kann man auch in Assembler objektorientiert programmieren.

Die Aussage: "wir programmieren objektorientiert, wir verwenden einen C++ Kompiler" wurde mir tatsächlich wörtlich so an den Kopf geworfen und ist natürlich falsch - man kann problemlos rein prozeduralen Code von einem C++ Kompiler übersetzten lassen. Auch Javacode ist nicht automatisch objekrorientiert (einfach alles static machen ;-) )

Ich empfehle mal das da zu lesen. Da ist recht genau erklärt was man unter OO versteht.

Zu Erlang kann ich nichts sagen, aber das macht sogar auf mich einen gewöhnungsbedürftigen Eindruck. (Ich hab immerhin schon Chill und Portal programmiert ;-) )
 

Sempah

Bekanntes Mitglied
Man unterscheidet die verschiedenen Paradigmen:

  • imperativ
    • prozedural
    • objektorientiert
  • deklarativ
    • logisch
    • funktional

... wobei auch Paradigmenintegration möglich ist -> sog. Multiparadigmensprache wie Scala, welche OOP + FP vereinigt. Der Einsatz von unterschiedlichen Sprachen wird unter dem Stichwort polyglot programming geführt.


Imperative Sprachen sind zustandsbehaftet, d.h. das ein Programm einen Zustand besitzt, welcher durch Befehle modifiziert wird. Ein Programm ist eine Folge von Anweisungen.

Bei deklarativen Sprachen steht nicht das WIE, sondern viel mehr die Lösung des Problems im Vordergrund (stelle dir SQL vor. SELECT x FROM tableY ...)
- keine Seiteneffekte, da referentiell transparent

Wie bereits gesagt wurde, ist in funktionalen Sprachen die Funktion das höchste Mittel der Abstraktion.
Funktionale Sprachen unterstützen in den meisten Fälle Funktionen höherer Ordnung (= Funktionale).
Diese können als Parameter einer anderen Funktion mitgeliefert werden, in Datenstrukturen abgelegt werden sowie Funktionen selbst als Ergebnis zurückliefern.

Funktionen werden häufig auch als "first class values" der Sprache bezeichnet.

In Scala ist z.B. so etwas möglich:
Code:
list = List(1, 2, 3, 4)
list.map(x => x * 2)

"map" ist eine Funktion höherer Ordnung, welcher eine anonyme Funktion "x => x *2" mitgegeben wird.
Auf jedes Element der Liste wird "* 2" angewendet. Da Immutabilität in funktionalen Sprachen groß geschrieben wird (Scala unterstützt jedoch auch mutable Datenstrukturen, da oop + fp), bleibt der Inhalt der Liste "list" unverändert. Die zweite Zeile führt zu einer neuen Liste ("list" wird nicht überschrieben!).

Und ja Scala unterstützt Closures. Als Concurrency Modell bietet Scala das Aktoren Konzept (welches aus Erlang bekannt ist) an. Natürlich könnte man aber auch Java's Concurrency Modell verwenden.
 

Landei

Top Contributor
Ok, Funktionen als Funktionsparameter -> damit hab ich nur in JS gearbeitet -> Prügelt mich wenn das in JS wieder ganz anders funktioniert wie in anderen Programmiersprachen.
Nö, ist im Prinzip überall ähnlich.

Für das kommende Projekt muss ich mich auch in Scala einarbeiten.
Gratuliere! Die beste Variante, wenn du schon Java kannst. Scala ist eine Hybridsprache, du kannst OO und funktional mixen, wie du es gerade brauchst.

Anscheinend bietet Scala auch so was wie Closures und Concurrency out of the Box.
Könnt ihr das bestätigen?
lg

Ja und Jainundeinhalb. Scala hat eine eingebaute Actor-Bibliothek (an Erlang angelehnt, es gibt aber auch alternative Implementierungen wie Akka), und an einer Fork-Join-basierten Bibliothek wird fleißig gewerkelt (das ist das einhalb).

Hier sind ein paar nützliche Links, die ich gesammelt habe: Scala lernen eSCALAtion Blog
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
D Vigenere Chiffre Programmierung Allgemeine Java-Themen 5
G Thread-Programmierung Allgemeine Java-Themen 5
R Input/Output Programmierung mithilfe der Robot Bibliothek Allgemeine Java-Themen 15
MiMa Programmierung von Bibliotheksklassen Allgemeine Java-Themen 3
zhermann Grundsatzfrage zur strukturierter Programmierung Allgemeine Java-Themen 5
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
P jCheckBox auf der zusammengeknüpften Programmierung anzeigen lassen Allgemeine Java-Themen 3
K Test-Frist Programmierung - wie vorgehen Allgemeine Java-Themen 5
C Programmierung von Fotoeffekten mit Java möglich? Allgemeine Java-Themen 3
J Rekursive Programmierung-Zählen von Ziffern Allgemeine Java-Themen 5
L Designfrage: Dispatcher-Programmierung - redundante Auslegung Allgemeine Java-Themen 1
E Sonderzeichen nicht setzbar: Großes Problem bei Programmierung unter Linux Mint mit Virtual Box Allgemeine Java-Themen 5
C BlackBox-Framework - Plugin Programmierung Allgemeine Java-Themen 4
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
C Open Soure Projekte für parallele Programmierung Allgemeine Java-Themen 6
E Thread Programmierung Allgemeine Java-Themen 2
K Multithread Programmierung...ExecutionCompletionService Allgemeine Java-Themen 7
E objektorientierte Programmierung Allgemeine Java-Themen 3
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
J Problem mit der Thread Programmierung Allgemeine Java-Themen 2
T Fehler bei der Programmierung eines Universaldienstbrowsers Allgemeine Java-Themen 3
J 3d-Programmierung Allgemeine Java-Themen 7
S BlueJ BlueJ - Geldautomat-Programmierung Allgemeine Java-Themen 2
J Hardware Programmierung Allgemeine Java-Themen 3
Kr0e Atomic / Lockfree Programmierung Allgemeine Java-Themen 11
6 Java - Threads - parallele Programmierung - Tutorial Allgemeine Java-Themen 6
I parallele Programmierung mit Java Allgemeine Java-Themen 3
X Error bei der Programmierung eines Sortieralgorithmus Allgemeine Java-Themen 2
J Modul/Komponenten/Addon-Programmierung Allgemeine Java-Themen 3
ModellbahnerTT Dynamische Programmierung, komme nicht weiter.... Allgemeine Java-Themen 15
S Applet Programmierung in Eclipse Allgemeine Java-Themen 12
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
Developer_X Batch Programmierung Allgemeine Java-Themen 4
Developer_X Datei Programmierung Allgemeine Java-Themen 18
hdi Suche nach Begriff aus der Programmierung Allgemeine Java-Themen 11
K Programmierung einer Hilfe Allgemeine Java-Themen 6
G Threads programmierung Allgemeine Java-Themen 7
F Frage zu JSP / Java Programmierung Allgemeine Java-Themen 2
L Brauche Hilfe bei Memory Programmierung Allgemeine Java-Themen 2
G Framework für Multi-Prozessor-Programmierung? Allgemeine Java-Themen 4
tomtailor Mobiltelefon - Programmierung Allgemeine Java-Themen 8
O Oberfläche und "richtige" Programmierung Allgemeine Java-Themen 8
ven000m Constraint Programmierung Allgemeine Java-Themen 6
X Langsames Java im Bereich der GUI-Programmierung Allgemeine Java-Themen 8
F Klausuraufgaben Java-Programmierung Allgemeine Java-Themen 10
D Elegante Programmierung. Allgemeine Java-Themen 7
G Software für Java programmierung Allgemeine Java-Themen 5
J Frage zu Objektorientierter Programmierung Allgemeine Java-Themen 9
K Bubblesort Programmierung, finde Fehler nicht . Allgemeine Java-Themen 25
bernd Hardwarenahe Programmierung Allgemeine Java-Themen 14
S Taschenrechner und Programmierung Allgemeine Java-Themen 4
D Fraen zur Programmierung einer Volltextsuche Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben