Was bedeutet "Visual" und "objektorientiert ?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Was bedeutet "Visual" und "objektorientiert ?

Beitrag von obbba »

Was bedeutet "Visual" und "objektorientiert", wenn von den Unterschieden zwischen Programmiersprachen gesprochen wird?

(und wieso stand im Titel &q statt "?) keine Ahnung , aber wer schreiben kann ist im Vorteil (bobobo)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Visual nennt man normalerweise oberflächen, bei denen man Fenster, die man erstellt, auf dem bildschirm sieht.

...und wenn man sie nicht sieht, nennt man es error. (<- sarkasmus über eigenen dummen satz oben)

klasse satz, ich probiers noch mal.

in PB schreibst du einen befehl hin, dass er ein fenster öffnen soll, und wie groß es sein soll.
OpenWindow(0,20,20,400,250,....

wenn du hingegen in deiner Programmierumgebung einfach einen knopf drückst, ein neues fenster bekommst und es mit der maus so groß ziehst, wie es später zur laufzeit erscheinen soll, dann nennt man es "visual"

uffa

und "objektorientiert" ist ein weites feld..
http://www.purebasic-lounge.de/viewtopi ... hlight=oop
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Naja, so wirklich definiert ist der begriff nicht.

Visuell bedeutet so viel wie sehend. Was gesehen wird kann in unterschiedlichen Umgebungen aber sehr unterschiedlich sein. Es gibt zum beispiel "Programmiertools" bei denen man wirklich graphisch Programmiert, in dem man Praktisch sowas wie ein Programmablaufplan zeichnet. Das könnte man zum "Visual" nennen.

Bei Microsoft ist es wirklich nur ein Marketing name. Die verwenden es zum beispiel für "Visual C++". Visual C++ ist keine RAD umgebung sondern hat nur einen kleinen Form-designer.
Sie verwenden es aber auch für "Visual Basic" welches eine RAD umgebung ist.

Objektorientiert ist nicht so einfach zu erklären. Jede erklärung wird praktisch immer mißverstanden, wenn derjenige dem man es erklärt es nicht sowieso schon weiß. Wenn du wissen willst was Objektorientierung ist, nimmst du dir am besten ein gutes Buch und lernst eine Objektorientierte Programmiersprache wie zb Smalltalk, C++, Objective-c, Object Pascal, D, Dyllan oder irgendeine andere der tausenden von Programmiersprachen.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Um mal einen kleinen Hinweis zur Objektorientierung zu geben:

Der klassische Ansatz ist prozedural (imperativ - Schritt für Schritt) - und so ist auch PureBasic angelegt. Objektorientiert meint Orientierung am Objekt und nicht an der Verarbeitungsreihenfolge. Objekte können Eigenschaften haben (z. B. sind grün, blau, haben Namen) und Methoden anbieten, die sie ausführen können (z. B. fliegen, berechnen, essen etc.). Objektorientierte Programmiersprachen sind Sprachen, die die Objektorientierung unterstützen (z. B. JAVA). OO ist eine andere Sicht der Dinge.

Ein Knopf in PureBasic wird über eine Ereignisschleife abgefragt.

Ein Knopf in JAVA gibt eine ActionPerformed-Nachricht (wenn gedrückt) an seine Beobachterobjekte. (Kommunikation zwischen Objekten)

...

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich finde das java tutorial von sun eigentlich ganz gut. ist aber in englisch und auch sehr umfangreich...jedenfalls wird da (logischerweise) auch auf die OOP eingegangen.

objekt-orientierte programmierung ist ein versuch die struktur von programmen noch stärker anzulehnen an die art und weise wie der mensch seine umwelt(-eindrücke) kathegorisiert (und abstrahiert).

das typische beispiel:


ein fahrzeug hat bestimmte eigenschaften:
-es besitzt einen antrieb(motor)
-es hat räder
-es fährt/ es steht still (es hat eine geschwindigkeit)
...

und bestimmte möglichkeiten "sich zu verhalten":
-beschleunigen/bremsen
-hupen
...

die eigenschaften werden durch variablen repräsentiert.
das verhalten wird durch "Methoden" beschrieben.

ein LKW ist ein fahrzeug. dass heißt, er besitzt alle eigenschaften und methoden eines fahrzeugs.
aber er ist ein spezielles fahrzeug, da er z.b. zusätzlich eine ladefläche besitzten kann.

auch ein PKW ist ein fahrzeug, aber ohne (grosse) ladefläche. er hat dafür aber mehr sitzplätze für personen.
LKW und PKW sind von FAHRZEUG abgeleitet.
diese kathegorien nennt man Klassen. sie beschreiben ein objekt.
erweitert man die klasse FAHRZEUG um eine ladefläche, so erhält man die klasse (also die beschreibung) LKW.
die klasse FAHRZEUG selbst bleibt dabei aber unverändert.

diese klassen sind aber nur eine art bauplan (eben eine beschreibung). ein verwendbares fahrzeug muss erst "gebaut" werden.
man sagt dann, es wird eine instanz der klasse FAHRZEUG erstellt.
eine instanz ist also ein nach einer bestimmten klasse erstelltes objekt.

der begriff objekt kann verwirren, weil er manchmal die klasse (beschreibung) meint, und manchmal wiederum für eine instanz der klasse verwendet wird.

entscheidend in der OOP ist, dass methoden immer auf den daten eines bestimmten objektes operieren, denn sie selbst gehören auch immer zu einem objekt. (einfach nur fahren geht nicht, man brauch irgend ein dingens dazu, welches fahren kann)

mal zum verständnis, auch wenn es streng genommen nicht korrekt ist:
klassen in der OOP ähneln etwas den strukturen in prozeduralen sprachen, aber letzere besitzten halt nur eigenschaften (felder).
methoden sind so ähnlich aufgebaut wie prozeduren/funktionen, und können auch parameter erwarten.
instanzen(objekte) von klassen(beschgreibungen) entsprechen in der prozeduralen programmierung nur variablen von einem bestimmten typ. (wenn man einen primitiven typ (oder eine struktur) hat, muss man ja auch erst eine variable davon deklarieren, um ihn nutzen zu können. der typ long beschreibt ja nur, dass er 4 byte platz brauch. aber die vier byte werden im RAM ja erst benutztbar wenn man eine variable vom typ long deklariert)

eine andere wichtige sache sind die zugriffsbestimmungen. in PB beispielsweise hat man die schlüsselwörter global, shared, protected, welche sich nur auf variablen beziehen. in der OOP gibt es auch zugriffskontrollen für methoden, also von wo aus eine methode aufgerufen werden darf. bestimmte eigenschaften und methoden eines objektes können "von aussen" unsichtbar/unerreichbar sein.
beispiel:
ein fahrzeug besitzt ein datum (singular von daten) namens geschwindigkeit.
die methode beschleunigen erhöht diese eigenschaft. aufruf:
auto.beschleunigen(10)
innerhalb der methode wird der wert von geschwindigkeit um 10 [km/h] erhöht.
(hier wird auch deutlich wie methoden mit objekten verknüpft sind, durch den punkt)
der fahrer hat sozusagen zugriff auf diese methode, er könnte auch direkt
auto.geschwindigkeit=auto.geschwindigkeit+10
ausführen. aber die fahrzeughersteller verhindern dies, denn es ist gefährlich und aufwendig für den fahrer, mit der hand unter die motorhaube zu greifen um die kurbelwelle zu drehen.
stattdessen stellen sie ihm die methode beschleunigen() zu verfügung (das gaspedal).

auf andere methoden wiederum, hat der fahrer wohlmöglich keinen zugriff. z.b. wird innerhalb der methode beschleunigen() eine andere methode namens benzinZufuhrAufdrehen() aufgerufen. das stellt sicher, dass die innere verwaltung des objektes, von diesem selbst gestaltet wird und so weniger fehler passieren. (weder kann, noch will jeder der ein auto fährt, wissen, wie dieses von grund auf funktioniert). dieses prinzip von unterschiedlicher sichtbarkeit, nennt man Kapselung.
[weiter fortschreitend in den ebenen, könnte man zum beispiel sagen, dass ein speditions-leiter nicht unbedingt einen führerschein braucht. er muss nur wissen, wie er mit dem fahrer kommuniziert.]
usw
usw



[ich hoffe ich hab hier keinen mist erzählt, hab mich selber nur mal n bisschen mit java beschäftigt; ansonsten bitte ich drum mich zu korrigieren!]
Zuletzt geändert von #NULL am 10.07.2006 18:47, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

<klugscheißmodus>
Auch Java und die meisten anderen Objektorientierten Programmiersprachen sind imperativ. Die einzigen Programmiersprachen die nicht imperativ sind, sind die Sprachen die nicht Befehlsorientiert arbeiten, also Funktionale Sprachen wie Haskell oder Opal.
</klugscheißmodus>
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

trotzdem find ich das modell recht gut, um das mal rüberzubringen...

@#NULL :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

@Zaphod:

<MaxKlugKack=ON>
Letztlich ist jede Programmiersprache imperativ, da auf Prozessorebene nur Befehle im eigentlichen Sinn verarbeitet werden können. Die Programmiersprache an sich ist jedoch für den Programmierer gemacht und die ist halt objektorientiert (im Falle von JAVA oder Smalltalk). Du hast natürlich völlig recht, dass diese Art von Sprachen nicht ohne imperative Mittel auskommt, aber diese stehen entgegen zu den prozeduralen Sprachen nicht im Vordergrund.
<MaxKlugKack=OFF>

Hier mal ein kleines Beispiel für die Anzeige eines Fenster mit einem Knopf darin in JAVA:

Code: Alles auswählen

import java.awt.*;
import java.awt.event.*;

public class BaseFrame extends Frame {
	
	public BaseFrame() {

		addWindowListener (new WindowAdapter() {
			public void windowClosing (WindowEvent e) {
				System.exit(0);
				}
		});
		setSize(300, 400);
		setLocation(100, 100);
	}
}

public class BaseFrameTest {
	
	public static void main (String args[]) {
		
		Frame f = new BaseFrame();
		f.setLayout(new FlowLayout());
		Button b = new Button ("Feuer!");
		b.addActionListener (new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		f.add (b);
		f.setVisible(true);
	}
}
Hierin sind zwei Klassen (BaseFrame und BaseFrameTest). BaseFrame ist abgeleitet (siehe #NULL) aus Frame und stellt ein besonderes Frame dar. Nämlich ist zusätzlich ein WindowListener, der aus einer anderen Klasse kommt (namens WindowAdapter) eingebaut, der bei Druck auf "Schließen" das Programm beendet. Des Weiteren sind Größe und Lage gesetzt worden. Die Testklasse erzeugt ein Objekt aus der BaseFrame-Klasse (also ein Window), einen Knopf aus der Button-Klasse mit einem ActionListener (löst die actionPerformed-Methode aus, wenn der Knopf gedrückt wurde).

Und so sieht das ganze in PB aus:

Code: Alles auswählen

If OpenWindow(0, 100, 100, 300, 400, "Test")
   If CreateGadgetList(WindowID(0))
      ButtonGadget(0, 10, 10, 40, 20, "Feuer!")
      
      Repeat
         Event.l = WaitWindowEvent()
         GID.l = EventGadget()
         Select event
            Case #PB_Event_Gadget
               Select gid
                  Case 0:
                     Break
               EndSelect
            Case #PB_Event_CloseWindow
               Break
         EndSelect
      ForEver
   EndIf
EndIf
End
Für alle, die sich für JAVA interessieren, sei dieses Buch empfohlen:

http://www.javabuch.de/

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

...und wer gerne auch mal etwas kritik an OOP hören möchte, um nicht seitenlastig zu werden, sollte sich dieses mal reinlesen:
http://www.geocities.com/tablizer/oopbad.htm
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Ne, die Programmiersprache selbst ist nicht zwangsläufig imperativ. Was auf der Prozessorebene passiert ist ja für die Sprachdefinition herzlich egal. Ich könnte sie ja auch auf einem theoretischem nichtimperativen Computer laufen lassen (daher kommen die Funktionalen Sprachen auch - aus der Überlegung in welcher Form man einen Computer bauen könnte).

Hier mal ein Beispiel für eine nichtimperative Programmiersprache:

Code: Alles auswählen

fibo :: Int -> Int
fibo n
       | n==0        = 0
       | n==1        = 1
       | n>0         = fibo (n-2) + fibo (n-1)
Das ist zb Haskell. Da gibt es keine Schleifen, keine Globalen Variablen, kein garnichts. Diese Sprachen basieren auf dem Prinziep der Ersetzung/Reduktion und orientieren sich an der Definition von Mathematischen Funktionen.
Antworten