Autor Beitrag
ForenHeini
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

Win XP
Delphi 7
BeitragVerfasst: Mi 15.11.06 16:17 
Hi !

Suche ein Buch, was mir die OOP anhand von Delphi beibringt.
Dazu muß ich sagen, dass ich einige Bücher zu Delphi besitze
(z.B. Bücher von Elmar Warken und andere dicke Wälzer :wink: )

Programmiere eigentlich auch schon lange (erste eigene Proggies auf C 116 -
dann Turbo-Pascal 3.0 bis 7 und schließlich Delphi - aber eben als Power-Hobby),
merke aber, dass es an der einen oder anderen Stelle an den Grundlagen in OOP fehlt.

Hab auch schon die üblichen Einführungen in die OOP der obigen Bücher gelesen.
Aber irgendwie werde ich da an manchen Stellen nicht so schlau draus.
Beispiel: z.B. kapiere ich nicht wie das mit TSender im Prozedurkopf funktioniert.

Ich bin sozusagen von Turbo-Pascal 3.0 bzw. 7.0 auf Delphi umgestiegen und dabei
sind einige Informationen der OOP nicht richtig angekommen :shock: :D 8).

Suche jetzt Büchertips wo die OOP anhand von Delphi erklärt wird.
Suche jetzt nicht die 100. Anleitung zu Schleifen in Delphi.

Ich weiß nicht ob ihr versteht welche Art von Buch ich meine.

Schreibt doch mal über eure Erfahrungen, wie ihr OOP gelernt habt
(ich meine jetzt nicht die einzelnen Befehle Schleifen etc. sondern das Konzept)

Gibt es vielleicht sogar interessante Links zu diesem Thema?
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Mi 15.11.06 16:54 
Crashkurs von Christian (hab den Link gerade nicht da) :(

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 15.11.06 18:52 
Geht es speziell nur um Delphi oder allgemein um OOP im Pascal-Umfeld ? Ich meine : sind die Grundlagen nun klar oder nicht ?

_________________
Gruß
Hansa
ForenHeini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

Win XP
Delphi 7
BeitragVerfasst: Do 16.11.06 12:45 
Ähm hab zwar wie gesagt schon etwas darüber gelesen aber man kann darüber ja nie genug Infos kriegen :roll: deswegen sag ich mal nein 8)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 16.11.06 16:39 
Du hast also schon eine gewisse Ahnung davon. Denkste zumindest ? :mrgreen: Dann ist Delphi wohl erst mal zweitrangig. Um das von der Pike an im Zusammenhang zu lernen/lesen empfehle ich immer das Turbo Pascal 5.5 Handbuch. War da nicht sogar ein extra OOP-Handbuch dabei ? :gruebel: Zumindest sind es einige Kapitel. Sind die klar, dann gucke weiter, was in Delphi dazukam. Das steht ja dann auch in aktuelleren Handbüchern/OH. Das alte erschlägt Dich nicht von Anfang an so mit Begriffen, wie die neueren. Finde das zum Einstieg immer noch besser.

Google mal nach "Borland Museum" da ist das TP 5.5 Handbuch. Dürfte aber auf englisch sein.

_________________
Gruß
Hansa
ForenHeini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

Win XP
Delphi 7
BeitragVerfasst: Fr 17.11.06 11:03 
Englisch ist kein Problem 8). Da werde ich dann mal nachschauen, ob es das ist was ich suche.
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Sa 18.11.06 13:03 
user profile iconForenHeini hat folgendes geschrieben:
Hi !

Suche ein Buch, was mir die OOP anhand von Delphi beibringt.


Interessant dazu ist ggf.:
www.schule.de/schule...ojekte/warum_oop.htm

Es gab eine Demo von Michael Puff (www.luckie-online.de) "Klassen in Delphi", die einen sehr einfachen Einstieg bietet. Wie Bspw.:

Zu Vererbung:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
{*******************************************************************************
 Project       : "Klassen in Delphi", Demo: Vererbung
 Date          : 2004-01-31
 Version       : 1.0
 Compiler Ver. : Delphi 6 Personal
 Author        : Michael Puff
 URL           : www.luckie-online.de
 Copyright     : Copyright (c) 2003 Michael Puff

           When I die I want 'Hello, world' carved on my headstone.
*******************************************************************************}


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btnParents: TButton;
    btnSon: TButton;
    procedure btnParentsClick(Sender: TObject);
    procedure btnSonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Family;

procedure TForm1.btnParentsClick(Sender: TObject);
var
  Parents: TParent;
begin
  Parents := TParent.Create;
  try
    ShowMessage(Parents.GetType + #13#10 + Parents.GetFamilyName + #13#10 +
      IntToStr(Parents.GetChildrenCount));
  finally
    FreeAndNil(Parents);
  end;
end;

procedure TForm1.btnSonClick(Sender: TObject);
var
  Son: TSon;
begin
  Son := TSon.Create;
  try
    ShowMessage(Son.GetType + #13#10 + Son.GetFamilyName + ', ' +
      Son.GetChristianName + #13#10 + IntToStr(Son.GetChildrenCount));
  finally
    FreeAndNil(Son);
  end;
end;

end.



ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
unit Family;

interface

type
  TParent = class(TObject)
  private
    FFamilyName: String;
    FChildrenCount: Cardinal;
  public
    constructor Create;
    function GetType: String;
    function GetFamilyName: String;
    function GetChildrenCount: Cardinal;
  end;

type
  TSon = class(TParent)
  public
    constructor Create;
    function GetType: String;
    function GetChristianName: String;  // Klasse TParent erweitert
  end;

implementation

////////////////////////////////////////////////////////////////////////////////
//
//  TParent.Create
//
//    Familienname und Anzahl der Kinder festlegen.

constructor TParent.Create;
begin
  FFamilyName := 'Müller';
  FChildrenCount := 1;
end;

////////////////////////////////////////////////////////////////////////////////
//
//  TParent.GetType
//
//    Verwandtschaftsbeziehung.

function TParent.GetType: String;
begin
  result := 'Eltern';
end;

////////////////////////////////////////////////////////////////////////////////
//
//  TParent.GetFamilyName
//
//    Familienname zurück geben.

function TParent.GetFamilyName: String;
begin
  result := FFamilyName;
end;

////////////////////////////////////////////////////////////////////////////////
//
//  TParent.GetChildrenCount
//
//    Anzahl der Kinder zurückgeben.

function TParent.GetChildrenCount: Cardinal;
begin
  result := FChildrenCount;
end;

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
//
//  TSon.Create
//
//    Konstruktor für TSon. Vererben den Konstruktors von TParents. Anzahl der
//    Kinder überschreiben.

constructor TSon.Create;
begin
  inherited;
  FChildrenCount := 0;
end;

////////////////////////////////////////////////////////////////////////////////
//
//  TSon.GetType
//
//    Verwandtschaftsbeziehung.

function TSon.GetType: String;
begin
  result := 'Sohn';
end;

////////////////////////////////////////////////////////////////////////////////
//
//  TSon.GetChristianName
//
//    Vorname zurückgeben.

function TSon.GetChristianName: String;
begin
  result := 'Otto';
end;

end.
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Sa 18.11.06 13:23 
user profile iconForenHeini hat folgendes geschrieben:
Hi !

Schreibt doch mal über eure Erfahrungen, wie ihr OOP gelernt habt
(ich meine jetzt nicht die einzelnen Befehle Schleifen etc. sondern das Konzept)



Die entscheidende Frage ist: Wann lohnt sich der erhebliche Mehraufwand, den OOP,OOD... mit sich bringt?

Darauf habe ich keine eindeutige Antwort. Generell: in großen Projekten mit mehreren Teammitgliedern oder in langfristigen Projekten.

Zudem halte ich es für sehr wichtig die Gefahren nicht zu unterschätzen. Alle die Mechanismen, die Dir helfen sollen, werden Dir das fürchten lehren wenn dein Modell sich bei wachsendem Projekt als untauglich erweist. Eine Objekthierarchie umzubauen ist dann nicht trivial. (eine Objekthierarchie zu konzipieren ebenfalls nicht)

Wie macht Ihr das?
1. immer, konsequent OOP
2. mal so, mal so, wie es eben kommt
3. folgende Projekte fange ich konsequent OO an...
..
9. was ist OOP?
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 18.11.06 19:19 
user profile iconQuake User hat folgendes geschrieben:
user profile iconForenHeini hat folgendes geschrieben:
Hi !

Schreibt doch mal über eure Erfahrungen, wie ihr OOP gelernt habt
(ich meine jetzt nicht die einzelnen Befehle Schleifen etc. sondern das Konzept)



Die entscheidende Frage ist: Wann lohnt sich der erhebliche Mehraufwand, den OOP,OOD... mit sich bringt?
...


Ich habe das gelernt bzw. benutze OOP seit es das gibt. Wer hätte es geahnt : seit Turbo Pascal 5.5. Deshalb ja die Empfehlung mit dem alten Handbuch.

Jetzt zu Quake User. Wo liegt der erhebliche Mehraufwand ? :shock: Know-How Beschaffung zählt zumindest bei mir nicht als Mehraufwand, der eventuell auf einer Rechnung auftaucht.

Vielleicht mal ein konretes Praxis-Beispiel :

Ein NICHT-OOP Programmierer braucht in seinem Programm 50 Edits für Zahlen. Was macht der ? Nicht viel. Er nimmt Exceptions wegen falscher Eingaben einfach in Kauf oder baut sich 50 Try-Blöcke drumrum. Mehr fällt mir jetzt nicht ein.

Der OOP-Programmierer denkt ganz anders. Denn er weiß : 50 Edits werden gebraucht. Ein irgendwann geplantes Zusatzmodul braucht wieder 50 Edits. Also baut er sich lieber einmalig sein eigenes TZahlEdit. Was ich hier schreibe ist keine Theorie, sondern das, was ich auch selber mache ! Hierzu nimmt er das TEdit als Vorfahr. TZahlEdit = class (TEdit); Also ist alles vom TEdit schon vererbt. Er muß aber noch was ändern und knöpft sich deshalb das OnKeyPress-Ereignis vor. Da besteht der Aufwand in folgender Zeile : if not key in ['0'..'9'then key := #0; Und jetzt ? Es KANN keiner mehr Buchstaben in ein Zahlenfeld eingeben ! Der User muß nicht mal für einen Fehler bestraft werden, weil er eben keinen machen kann. Dann wird noch gleich eine rechtsbündige Eingabe dazugemacht usw.

Da er nun schon ein TZahlEdit hat : was liegt näher, auch gleich die Reals zu erledigen ? Nichts leichter als das :
TRealEdit = class (TZahlEdit)

OnKeyPress :
ausblenden Delphi-Quelltext
1:
2:
3:
if not key in ['0'..'9',DecimalSeparator] then 
  key := #0;
// nur einmal DecimalSeparator zulassen


Er muss dann also noch das mit dem DecimalSeparator einbauen. Die Rechtsbündigkeit ist aber bereits vorher abgehakt worden. Wie wärs vielleicht noch mit einem Feld "NachKommaStellen" gleich im OI ? Wird mit published erledigt.

@Anfänger : nicht nachmachen ! Das Beispiel bezieht sich auf OOP und Komponentenentwicklung. Das geht zwar echt so einfach, aber nicht von alleine. 8)

_________________
Gruß
Hansa
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: So 19.11.06 16:54 
Hast du dir schon mal meinen langen Artikel zu OOx durchgelesen? Da sind auch gute Buchtipps drin.
Suche in: Delphi-Forum OOA,OOD,OOP JETZT MAL ERSTHAFT
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Mo 20.11.06 00:35 
Zitat:

Jetzt zu Quake User. Wo liegt der erhebliche Mehraufwand ? :shock: Know-How Beschaffung zählt zumindest bei mir nicht als Mehraufwand, der eventuell auf einer Rechnung auftaucht.

ACK

Zitat:

Vielleicht mal ein konretes Praxis-Beispiel :
Ein NICHT-OOP Programmierer braucht in seinem Programm 50 Edits für Zahlen. Was macht der ? Nicht viel. Er nimmt Exceptions wegen falscher Eingaben einfach in Kauf oder baut sich 50 Try-Blöcke drumrum. Mehr fällt mir jetzt nicht ein.

Ok - um bei Deinem Bsp. zu bleiben:
Wann weißt Du, dass nur Zahlen eingegeben werden sollen? Zu Begin des Projekts? Nein, Du erfährst das mitten im Projekt. Baust Du dann alles um oder leitest Du Dir prinzipiel IMMER deine Edits erst ab? (das eben ist Mehraufwand)

Realitätsnah ist bsp.:
Ich muss Daten auslesen (Kunden) Also nehme ich Variablen und schreibe die Daten dort rein. ODER ich baue eine Klasse Kunde oder nein besser eine Klasse Person (ggf. sind ja nicht alle Kunden) also muss ich erst noch mal mit meinem Auftraggeber reden. (Mehraufwand) Und ganz am Ende stellt sich raus: ich brauche eine Klasse "Kontakte" und es gibt dann abgeleitete Klassen für Person (Kontakte müssen nicht immer Personen sein) und davon abgeleitet eine Klasse Kunden.
Habe ich also alles 3x umgebaut. (Mehraufwand)
Oder ich habe das perfekte Projekt und kläre ALLES vor Projektstart. (Das klappt natürlich auch mit allen Kunden :-) )

DEIN Bsp. war natürlich ein gutes Bsp. Hier macht das Sinn. Ich denke, solche Bsp. suchen wir auch. Also weiter so.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 20.11.06 01:31 
user profile iconQuake User hat folgendes geschrieben:
Wann weißt Du, dass nur Zahlen eingegeben werden sollen? Zu Begin des Projekts?...


Natürlich weiß man, wo man anfangen muß. Alles andere ist Unsinn. Wenn nicht mal klar ist, ob es sich bi einem Feld um eine Zahl oder einen string handelt, dann fange besser gar nicht erst an damit, ein Hellseher-Programm zu schreiben.

_________________
Gruß
Hansa
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: Di 21.11.06 01:32 
Zitat:

... Wenn nicht mal klar ist, ob es sich bi einem Feld um eine Zahl oder einen string handelt, dann fange besser gar nicht erst an damit...


Hast Du Kontakt zu echten Kunden? Das sind Nichtprogrammierer und die überlegen sich Dinge oft neu und anderst.
Deine Anforderung ist unrealistisch. Gute Programme müssen isch an neue Bedingungen anpassen lassen.

Zitat:

dann fange besser gar nicht erst an damit...

Wenn man damit NICHT sein Geld verdienen muß, kann man so denken.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Di 21.11.06 02:02 
user profile iconQuake User hat folgendes geschrieben:
Zitat:

... Wenn nicht mal klar ist, ob es sich bi einem Feld um eine Zahl oder einen string handelt, dann fange besser gar nicht erst an damit...

..Deine Anforderung ist unrealistisch. Gute Programme müssen isch an neue Bedingungen anpassen lassen.


Ja sicher muß ein Programm wartungsfreundlich sein. Deshalb ja auch OOP ! Man kann aber doch nicht sein Programm für jeden anders machen. Wie wärs mit 365 Windows-Versionen pro Jahr ? Wünsche von Nicht-Programmierern sind IMMER mit Vorsicht zu genießen. :mrgreen: Wenn ich sage : "Gut, das könnte sinnvoll sein, mal sehen ob das in die nächste Version eingebaut werden kann" das ist was ganz anderes als lapidar zu sagen "wird morgen eingebaut". Und dann stellt sich im Nachhinein der dahintersteckende Irrtum heraus und der muss noch dem mit der "grandiosen Idee" tagelang erklärt werden. So was habe ich mir längst abgewöhnt.

_________________
Gruß
Hansa
Quake User
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 159



BeitragVerfasst: So 26.11.06 16:33 
user profile iconForenHeini hat folgendes geschrieben:
Hi !

Suche ein Buch, was mir die OOP anhand von Delphi beibringt.
...


Hat Dir einer der Hinweise weiter geholfen? Und Welcher?