AGB  ·  Datenschutz  ·  Impressum  







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

Frage zum Thema OOP

Ein Thema von Net7 · begonnen am 1. Nov 2005 · letzter Beitrag vom 3. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#1

Frage zum Thema OOP

  Alt 1. Nov 2005, 13:20
Hi Leute,

Zur Zeit setze ich mich mit OOP auseinander. Mir ist auch im Grunde klar wie es funktioniert, nur habe ich Probleme beim Planen von OOP Projekten.

Mir kommt es so vor als wüsten die Leute die Objektorientiert programmieren von Anfang an wie das Programm funktionieren soll. Ok, bei einem Taschenrechnerprogramm kann ich das noch nachvollziehen, aber bei grösseren Programmen verliere ich den Faden.

Man kann doch nicht alles berücksichtigen.

Wie plant man sowas??
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 13:48
Zitat von Net7:
...Man kann doch nicht alles berücksichtigen.
Ich glaube, das Prinzip ist doch nicht so klar, wie Du denkst. 8) Es gibt ja so schöne Beispiele wie Fahrrad und LKW. Ich verwende mal lieber ein Delphi-Beispiel : TEdit. Ich will jetzt eines, das nur Zahlen aufnimmt. Das TEdit an sich braucht darüber aber überhaupt nichts zu wissen. Ich leite es aber davon ab, indem ich ihm eine neue OnKeyPress Eigenschaft verpasse :

Delphi-Quellcode:
  TIntEdit = class(TEdit)
  protected
    procedure KeyPress(var Key: Char); override;
  end;
Das override sagt, daß die ursprüngliche Methode durch die neu definierte ersetzt wird. Das ganze ist im protected Teil, weil ich es eventuell später weiter ableiten will. Die konkrete Prozedur sieht nun so aus :

Delphi-Quellcode:
procedure TIntEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if not (Key in ['0'..'9']) then
    key := #0;
end;
Durch das inherited wird sichergestellt, daß alle dem TEdit bekannten Methoden auch dem neuen TIntEdit bekannt sind. Die Planung spielt hierbei nur eine untergeordnete Rolle. Was ist, wenn einem später bewußt wird, daß es auch Gleitkommazahlen gibt ?

Buchstaben sollen so oder so nicht zugelassen werden, wohl aber ein DecimalSeparator. Also geht man vom TIntEdit aus und ändert das ab :

Delphi-Quellcode:
TRealEdit = class(TIntEdit)

procedure TRealEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key); // nur 0..9 werden zugelassen, sonst :
  if (Key <> DecimalSeparator]) then // hier auch noch , oder . zulassen
    key := #0;
end;
Sehr beliebt ist es allerdings auch, solche Konstrukte direkt von TControl abzuleiten, was bedeutet, das Rad komplett neu zu erfinden. Wer so was macht, der hat OOP einfach nicht verstanden. Denn das Geheimnis liegt lediglich darin, den am besten geeigneten Basistyp als Grundlage zu nehmen.
Gruß
Hansa
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 13:53
Zitat von Hansa:
Sehr beliebt ist es allerdings auch, solche Konstrukte direkt von TControl abzuleiten
Von TControl? Bist du dir da sicher? Oder meintest du TGraphicControl bzw. TWinControl/TCustomControl? Wenn man nämlich von TControl ableitet kommt man nicht all zu weit.
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#4

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 13:55
Zitat:
...Man kann doch nicht alles berücksichtigen. ouch!
Muss man auch gar nicht. Grundvorausetzung, um ein Programm zu schreiben ist ja sowieso, dass man weiss, was man am Ende als Ergebnis haben möchte. Genau dazu gibt es ja Pflichtenhefte.
Mit dem Planen fängt man dann erstmal grob an und geht dann erst später ins Detail.
Beispiel:

Ich weiss, dass ich eine Datenbank benötige. Also sehe schon mal vor, später darauf Zugriff zu haben, wenn ich es brauche. Wie genau das dann in der Implementation aussieht ist dabei erstmal egal.
Dann geht's nach dem gleichen Prinzip um die Oberfläche: Welche Information brauche ich wo und wie. Wo die herkommn und wie die Oberfläche aussieht ist erstmal egal.

Erst wenn das Grundprinzip steht kümmert man sich dann um den tatsächlichen Inhalt. Das ganze fällt dann unter den Begriff "Kapselung". Ich weiss also erstmal, was ich will. Wie das dann intern abläuft interessiert (erstmal) nicht.

Das ganze erfordert natürlich einen Haugen Planung, dass Ergebnis rechtfertigt allerdings (fast immer) den Aufwand.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 14:06
Hallo Net7,

nein natürlich wissen Entwickler nicht komplett, was am Ende rauskommen soll. Es gibt aber Hinweise, wie man vorgehen soll. Grundsätzlich wird heute häufig das V-Modell (siehe z.B. hier) angewandt und zwar nicht nur für öffentliche Aufträge. Dabei werden verschieden Phasen und entsprechende Phasendokumente beschrieben, die in einem Entwicklungsprozess vorkommen. Für die Analyse solltest du objekt orientiert arbeiten. Die Ergebnisse vieler Phasen werden heute in UML festgehalten. Dort beginnt man in der Regtel mit sogenannten Use Cases, erstellt danach Activity Diagrams und darauf aufbauend Class Diagrams. Mit State Events, Interaction Diagrams und Packages stehen weiter Hilfsmittel zur Verfügung. Alle Phasen werden iterativ immer wieder durchlaufen und die Ergebnisse erweitert, bis das gesamte Produkt steht. Schau dir mal Bücher zum Thema Objektorientierte Analyse und Design mit UML an. Dort werden diese Aspekte häufig gut beschrieben.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#6

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 14:34
Vielen dank schon mal für die Antworten.

@Hansa, Vielen Dank für deine Mühe,und deine Beispiele.Aber wie man Objecte ableitet ect. das weiß ich. Darum gehts aber nicht. Es geht nur um die Planung.


@KrasserChecker

Na dann bin ich ja beruigt, also wächst die Planung mit dem Projekt. Das hört sich gut an.


@MrSpock

joa.. UML ist eine feine Sache, das mit den VDiagramm werd ich mir mal genauer anschauen.




Bleibt nur zu hoffen das man nach einer bestimmten Größe des Projekts, nicht den Überblick verliert.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 14:35
Zitat von Hansa:
Buchstaben sollen so oder so nicht zugelassen werden, wohl aber ein DecimalSeparator. Also geht man vom TIntEdit aus und ändert das ab :

Delphi-Quellcode:
TRealEdit = class(TIntEdit)

procedure TRealEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key); // nur 0..9 werden zugelassen, sonst :
  if (Key <> DecimalSeparator]) then // hier auch noch , oder . zulassen
    key := #0;
end;
Jaja, das ist wohl etwas überhastet gewesen. Durch den Aufruf von inherited Keypress aus TIntEdit kriegst du Key = #0 zurück, wenn nicht eine Zahl gedrückt wurde. Das also auch beim Decimalseparator. Nach dem Aufruf ist Key also #0, und den Vergleich mit DecimalSeparator ist überflüssig
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 15:03
@Jelly : jo.

In der Praxis siehts so aus :

Delphi-Quellcode:
constructor TIntEdit.Create(AOwner: TComponent);
begin
  inherited;
  ZulZeichen := ['0'..'9',#8];
  FAlignment := taRightJustify;
end;

procedure TIntEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if not (Key in ZulZeichen) then
    key := #0;
end;

{ TRealEdit }

constructor TRealEdit.Create(AOwner: TComponent);
begin
  inherited;
  ZulZeichen := ZulZeichen + [DecimalSeparator];
end;
"ZulZeichen" steht ab TIntEdit zur Verfügung. Da ist nun aber wirklich nicht viel zu planen, geschweige denn, seine Zeit mit dem Entwurf irgenwelcher Diagramme zu verplempern. 8) Später hat man dann nämlich nicht nur seine Programme zu warten, sondern auch noch die Diagramme. IMHO bringen solche Dinge nur in Ausnahmefällen eine Verbesserung, im Normalfall ist es eher ein Hindernis.
Gruß
Hansa
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#9

Re: Frage zum Thema OOP

  Alt 1. Nov 2005, 18:44
Hallo Hansa!

Da muss ich mich mal reinhängen. Für Dein Beispiel hast Du recht. Aber was ist bei wirklich großen Projekten. Bei großen Datenbanken im LAN oder Internet? Oder nehmen wir die VCL. Die mußte erst mal entwickenlt werden, damit Du Dein TEdit, wir unsere Klassen davon ableiten (kannst) können. Mag sein, das die UML-Listen auch gewartet werden müssen. Dann ergäbe sich an dieser Stelle die Notwendigkeit der Weiterentwicklung. Meiner Ansicht nach kannst Du aber bereits mit ModelMaker und/oder Together von Borland auf UML-Basis Deine Anwendung entwickeln und Delphi baut Dir den passenden Quelltext (ab Delphi 8) Ich habe sowas in Köln auf der Borland Roadshow zu Delphi 8 gesehen. Die haben mit nem UML Tool das Gerüst der Anwendung erstellt und anschließend sofort Quelltext erzeugt, der dann mit Leben gefüllt wurde, ähnlich der Quelltexterzeugung des Formular-Designers. Wenn dort die UML-Listen separat gewartet werden müssen, beauftrage ich hiermit die Borlander, diesen Zustand umgehend zu ändern, noch vor Erscheinen von Delphi 2006.

schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Frage zum Thema OOP

  Alt 2. Nov 2005, 16:29
Zitat von Hansa:
Delphi-Quellcode:
TRealEdit = class(TIntEdit)

procedure TRealEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key); // nur 0..9 werden zugelassen, sonst :
  if (Key <> DecimalSeparator]) then // hier auch noch , oder . zulassen
    key := #0;
end;
So wird das aber nichts... decimalseparator wurde ja schon im inherited genullt

EDIT: am besten wäre hier wohl ein set of char, das mit allem, das erlaubt ist, befüllt wird. wobei dann das ganze ableiten hinfällig wird, wenn man dieses als feld deklariert und in der keypress-prozedur überprüft.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:42 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