AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen? Warum?

Ein Thema von Qwert Zuiopü · begonnen am 20. Jan 2008 · letzter Beitrag vom 27. Jan 2008
Antwort Antwort
Seite 2 von 3     12 3      
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:44
Zitat von Qwert Zuiopü:
könnte man nicht genauso gut ohne klassen arbeiten?
'auch' : Ja.
'genauso gut' : Nein.

Heutzutage beauftragt man ein Logistikunternehmen, eine Produktionsstätte inklusive Knowledgetransfer, Zollformalitäten, Schulungen, Maschinen, Infrastruktur etc. nach Molwanien zu verlagern.

'Geht das nicht genausogut mit einem Fahrad inkl. Anhänger'?

'auch' : Ja.
'genauso gut' : Nein.

Edit: Komplexe Applikationen sind ohne OOP nicht mehr so einfach zu realisieren. Erst der Paradigmenwechsel zur objektorientierten Sichtweise ermöglicht es, größere Programme (etwas) fehlerfrei(er) und (ein wenig) robust(er) zu entwickeln. Es wird mit Sicherheit noch weitere Paradigmenwechsel nötig sein, um Anwendungen in status nascendi wirklich brauchbar und robust zu erzeugen.

Aber natürlich ist dein Dilemma offensichtlich: Letztendlich wird ja OOP in den guten alten Spaghetti-Code (=Assembler) übersetzt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:44
Die objektorientierte Programmierung führt u.A. zu besserer Wartbarkeit. In größeren Projekten sind sie daher sehr sinnvoll. Aber: Das Programmierparadigma muss dir dienlich sein, nicht umgekehrt. Ich halte nichts davon, Klassen um ihrer selbst willen zu verwenden.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:46
Zitat von alzaimar:
Zitat von Qwert Zuiopü:
könnte man nicht genauso gut ohne klassen arbeiten?

'auch' : Ja.
'genauso gut' : Nein.

Heutzutage beauftragt man ein Logistikunternehmen, eine Produktionsstätte inklusive Knowledgetransfer, Zollformalitäten, Schulungen, Maschinen, Infrastruktur etc. nach Molwanien zu verlagern.

'Geht das nicht genausogut mit einem Fahrad inkl. Anhänger'?

'auch' : Ja.
'genauso gut' : Nein.
Schön ausgedrückt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:49
Wobei ich Appolonius auch Recht geben muss, man muss ja nicht um jede Ausgabezeile gleich eine Klasse bauen: Hello World
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Qwert Zuiopü

Registriert seit: 2. Jan 2008
17 Beiträge
 
Delphi 7 Personal
 
#15

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:49
also legt man z.B. in einer klasse das bild eines männchen,seine x- und y- koordinaten fest, und sagt(schreibt) dann später in einer Prozedur:
Delphi-Quellcode:
if j=10 then
 begin
 maennchen.x:=maennchen.x+1;
 end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:50
agenommen du baust einen Messanger. Für jeden Gesprächspartner hat mein ein eigenes Nachrichtenfenster. Es wäre jetzt unsinn 100 solche Fenster zu bauen um im schlimmsten Fall mit 100 Leuten zu texten. Einfacher ist es da eine Fensterklasse zu stellen und einfach 100 Instanzen zu erstellwen wenn sie benötigt werden (also 100 mal Create).
Mit Objectorientierter Programmierung sieht der Quelltext hübsch und niedlich aus.

Natürlich kann man das ganze auch ohne Objekteorientierter Programmierung machen (also ohne direkt Objecte zu nutzen) aber der entstehende Quelltext ist dann wohl letztendlich der gleiche der bei Objekten im verborgenen umgesetzt wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#17

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:54
Eher nicht. Man schreibt eher eine Funktion die das übernimmt, also:

Delphi-Quellcode:
if j=10 then
begin
maennchen.move(1,0)
end;
Wie du die Position intern verarbeitest, sollte man nicht mehr sehen. Sowas nennt sich 'information hiding'. Du kannst es dir so vorstellen, dass jemand eine Klasse schreibt und jemand anders nicht den ganzen Code kennt, sondern nur die Funktionen mit Beschreibungen.
Wie die Position intern gespeichert wird (als int, string, whatever), kann demjenigen, der die Klasse benutzt egal sein.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:56
Moin Qwert,

ich möchte mal behaupten, dass Du wenige Delphi-Programme, ohne eine Klassen finden wirst.
Wenn es nicht gerade ein Konsolenprogramm ist, sondern mindestens ein Formular enthält, hast Du eine auf jeden Fall einmal ein Application-Objekt (eine Instanz der Klasse TApplication), und ein Formular-Objekt (eine Instanz der Klasse TForm, bzw., standardmässig, TForm1).

Die ursprüngliche Idee hinter der Objekt-Orientierten-Programmierung war es, dass die reale Welt sich eigentlich auch "nur" aus Objekten zusammensetzt.
Klassen stellen hierbei, sozusagen, den Bauplan für Objekte zur Verfügung.
Sie können Felder, Methoden, und Eigenschaften haben.
Felder sind, i.d.R., klasseninterne Variablen.
Methoden sind Prozeduren und Funktionen, mit denen die Daten verarbeitet werden können.
Eigenschaften dienen dazu Daten zwischen einem Objekt und anderen Programmteilen austauschen zu können.

Klassen können auch voneinander Erben (Klassen können voneinander abgeleitet werden).

Um mal das Eingangsbeispiel zu verwenden:
Wenn man ein neues Programm erstellt, wird hierfür, standardmässig, eine Klasse TForm1 generiert, die von TForm erbt.
Solange man nichts weiter hinzufügt, sind TForm1 und TForm identisch.
Wenn man jetzt einen Button auf das Formular legt, ist TForm1 eine eine Ableitung von TForm, die um ein Feld (Button1) ergänzt wurde.

Das war jetzt zwar erst einmal ziemlich kurz, aber ich hoffe es hat ein wenig Einblick gegeben.

Verwenden kann man Klassen dann in vielfältiger Weise.
In den meisten Programmen habe ich beispielsweise ein Klasse für die Einstellungen.
Damit kann ich die Funktionalität Einstellungen zu speichern und zu laden, so auslagern, dass es für das restliche Programm völlig uninteressant ist, wie das geschieht. Ob ich die Einstellungen in einer Datei lokal auf dem Rechner speichere, oder in der Registry spielt dann keine Rolle, und kann jederzeit geändert werden, ohne das der übrige Programmablauf davon beeinflusst wird.

Eine andere Möglichkeit ist es bestehende Klassen zu ergänzen, um sie den eigenen Bedürfnissen anzupassen.
Ein Beispiel hierfür:
TImage merkt sich niemals, woher jetzt die geladene Graphik stammt.
Also leite ich mir eine Klasse von TImage ab, in der ich mir den Pfad merke:

Delphi-Quellcode:
type
  TMyImage = class(TImage)
  private
    FsFilePath : string;
  public
    // Eine neue Methode
    procedure LoadFromFile(const AsFilepath : string);
    // Eine neue Eigenschaft
    property Filepath : string read FsFilePath;
  end;

procedure TMyImage.LoadFromFile(const AsFilepath: string);
begin
  // die in TImage enthaltene Eigenschaft Picture nutzen, um das Image zu laden
  Picture.LoadFromFile(AsFilepath);
  // und gleichzeitig den verwendeten Pfad speichern
  FsFilePath := AsFilepath;
end;
Alle übrigen Eigenschaften und Methoden von TImage bleiben hierbei erhalten.

Man könnte das jetzt noch variieren:

Delphi-Quellcode:
type
  TMyImage = class(TImage)
  private
    FsFilePath : string;
    // Die, sogenannte, Setter-Methode für eine Eigenschaft
    // (Getter-Methoden kann man auch verwenden, ist hier allerdings nicht
    // unbedingt sinnvoll)
    procedure SetFilePath(const Value: string);
  public
    property Filepath : string read FsFilePath write SetFilePath;
  end;

procedure TMyImage.SetFilePath(const Value: string);
begin
  Picture.LoadFromFile(Value);
  FsFilePath := Value;
end;
Das Image wird einfach durch das Zuweisen eines Pfades geladen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:57
Zitat:
also legt man z.B. in einer klasse das bild eines männchen,seine x- und y- koordinaten fest, und sagt(schreibt) dann später in einer Prozedur:
Hierfür würde ja ein Record reichen. Die Vorteile von Klassen leigt aber woanders.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#20

Re: Klassen? Warum?

  Alt 20. Jan 2008, 18:58
Eher nicht. Man schreibt eher eine Funktion die das übernimmt, also:

Delphi-Quellcode:
if j=10 then
begin
maennchen.move(1,0)
end;
Wie du die Position intern verarbeitest, sollte man nicht mehr sehen. Sowas nennt sich 'information hiding'. Du kannst es dir so vorstellen, dass jemand eine Klasse schreibt und jemand anders nicht den ganzen Code kennt, sondern nur die Funktionen mit Beschreibungen.
Wie die Position intern gespeichert wird (als int, string, whatever), kann demjenigen, der die Klasse benutzt egal sein.

Du hast grundsätzlich Vorteile:

a) Du kannst Code wiederbenutzen. Wie bei dem Messenger-Beispiel brauchst du nur einmal den Code schreiben und kannst ihn hundert Mal benutzen. Wenn du die Klasse in eine eigene Unit packst, kannst du die Klasse mit wenigen Zeilen in einem anderen Projekt nutzen, ohne den Code kopieren zu müssen.

b) Wenn du etwas am Code ändern willst, machst du das an einer Stelle und nicht an hundert. (Viel Spaß beim Suchen ). Wenn du einen Fehler machst, musst du ihn nur an einer Stelle korrigieren.

c) das eben erwähnte Information Hiding. Wenn die Klasse fertig ist, brauchst du nicht mehr so genau wissen, wie es intern funktioniert. Bestes Beispiel ist die GUI. Wohl niemand weiss so ganz genau, wie ein Button funktioniert, aber eine On-klick Methode kann jeder DAU schreiben.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz