AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Warum und wann eine Klasse benutzen

Ein Thema von IMPEGA · begonnen am 16. Okt 2013 · letzter Beitrag vom 17. Okt 2013
Thema geschlossen
Seite 2 von 4     12 34   
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
80 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: Warum und wann eine Klasse benutzen

  Alt 16. Okt 2013, 19:47
Die letzten beiden Antworten sind genau das was ich gesucht habe.
Ja @stahli genau so solltest du es verstehen.
Genau derart Antworten habe ich gesucht.
Ich benutze schon ziemlich lange eigene Klassen, habe mich aber nie wirklich damit beschäftigt.
Nun hat es angefangen mich ernsthafter zu interessieren, und siehe da, es tauchten Fragen auf.
Auch ein Dank an @Popov , sehr gut erklärt. Das sind Gründe genug um mehr über OOP zu lesen.
Es ist nämlich nicht so dass es ganz neu für mich ist, nun möchte ich es aber besser und sinnvoller machen.
Danke noch Mal.
 
Popov
(Gast)

n/a Beiträge
 
#12

AW: Warum und wann eine Klasse benutzen

  Alt 16. Okt 2013, 20:02
Ja, manchmal muss erst der berühmte Groschen fallen. Ich hatte mal das Problem mit begin und end bei Pascal, da ich mit dem C64, bzw. TI-99/4A Basic angefangen habe und das Basic diesen "Unsinn" nicht brauchte. Ich konnte erst weiter machen, als ich verstanden habe, dass auch Basic ein begin und end hat, nur versteckt, bzw. indirekt (siehe next bei for). Im Grunde das Gleiche in grün. Manchmal muss einfach der Groschen fallen.
 
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Warum und wann eine Klasse benutzen

  Alt 16. Okt 2013, 20:36
Ein weiterer, sehr toller Aspekt an OOP ist Polymorphie. Für mich ist das vielleicht sogar der entscheidende Punkt, da man ihn im Gegensatz zu Kapselung und Vererbung eigentlich nicht gescheit ohne Klassen simulieren kann (technisch möglich ist es natürlich, ist dann aber nicht mehr wirklich eleganter als Alternativen).

Delphi-Quellcode:
type
  TShape = class
  protected
    FLeft, FTop, FSize: integer;
  public
    procedure DrawTo(Canvas: TCanvas); virtual; abstract;
    property Left: integer read FLeft write FLeft;
    property Top: integer read FTop write FTop;
    property Size: integer read FSize write FSize;
  end;

  TCircle = class(TShape)
  public
    procedure DrawTo(Canvas: TCanvas); override;
  end;

  TSquare = class(TShape)
  public
    procedure DrawTo(Canvas: TCanvas); override;
  end;

implementation

procedure TCircle.DrawTo(Canvas: TCanvas);
begin
  Canvas.Ellipse(Left, Top, Left + Size, Top + Size);
end;

procedure TSquare.DrawTo(Canvas: TCanvas);
begin
  Canvas.Rectangle(Left, Top, Left + Size, Top + Size);
end;
Delphi-Quellcode:
type
  TMyForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    FShapes: array[0..4] of TShape;
  end;

implementation

procedure TMyForm.FormCreate(Sender: TObject);
begin
  // *Irgendwelche* Formen z.B. in einem Array/Liste speichern.
  // Konkreter Typ ist egal, solange sie nur von TShape erben.
  for i := low(Shapes) to high(Shapes) do
  begin
    if Odd(i) then
      Shapes[i] := TCircle.Create
    else
      Shapes[i] := TSquare.Create;

    Shapes[i].Size := i * 5;
    Shapes[i].Left := i * 20;
    Shapes[i].Top := 0;
  end;
end;

procedure TMyForm.FormPaint(Sender: TObject);
begin
  // Wir können jetzt alle diese verschiedenen Objekte mit dem gleichen
  // Code verarbeiten, obwohl es sich um verschiedenartige Klassen
  // handelt und jeweils spezialisierter Code ausgeführt wird
  // -> man spart sich u.U. etliche Case-Strukturen, die den Code
  // sonst unübersichtlich und fehleranfällig machen würden
  for i := low(Shapes) to high(Shapes) do
    Shapes[i].DrawTo(Canvas);
end;

procedure TMyForm.FormDestroy(Sender: TObject);
begin
  for i := low(Shapes) to high(Shapes) do
    Shapes[i].Free;
end;
Mit records geht das einfach nicht so schön... vor allem nicht, wenn man später das Programm leicht um weitere Spezialisierungen erweitern können will.
 
Benutzerbild von DeddyH
DeddyH

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

AW: Warum und wann eine Klasse benutzen

  Alt 16. Okt 2013, 20:47
Die 3 großen Stichworte zur OOP lauten Kapselung, Vererbung und Polymorphie. Kurze vereinfachte Erläuterung zu den einzelnen Stichworten:
Kapselung:
Eine Klasse stellt die Konsistenz ihrer Daten selbständig sicher. Das erreicht sie dadurch, dass sie keinen direkten Zugriff auf diese gewährt, sondern lediglich über Schnittstellen in Form von Properties. Außerdem kann sie über Sichtbarkeitsebenen (private, protected, public) bestimmen, wer auf welche Daten und Methoden Zugriff haben soll.
Vererbung:
Wird eine Klasse von einer anderen abgeleitet, so erbt sie automatisch deren Properties und Methoden, ohne dass eine einzige zusätzliche Zeile Code nötig wäre. So lässt sich eine Klassenhierarchie aufbauen, in der die Funktionalität und/oder Spezialisierung von oben nach unten stetig zunimmt.
Polymorphie:
Vielgestaltigkeit, d.h. man kann z.B. einen Funktionsparameter vom Typ einer bestimmten Basisklasse deklarieren und sichergehen, dass auch davon abgeleitete Klassen dazu passen, ohne deren exakten Typ kennen zu müssen. Das klingt vielleicht etwas abstrakt, daher mal ein Beispiel:
Delphi-Quellcode:
type
  TTier = class
  public
    procedure GibLaut; virtual; abstract;
  end;

  THund = class(TTier)
  public
    procedure GibLaut; override;
  end;

  TKatze = class(TTier)
  public
    procedure GibLaut; override;
  end;

...

procedure THund.GibLaut;
begin
  ShowMessage('Wuff');
end;

procedure TKatze.GibLaut;
begin
  ShowMessage('Miau');
end;

procedure MachKrach(Tier: TTier);
begin
  Tier.GibLaut;
end;
In der Prozedur MachKrach ist ein Parameter vom Typ TTier deklariert. Es ist der Prozedur also vollkommen wurscht, ob es sich dabei nun um einen Hund oder eine Katze handelt, sie weiß aber, dass das Tier auf jeden Fall über eine Methode GibLaut verfügt, so dass sich diese über die TTier-Klasse aufrufen lässt.

Man kann natürlich auf den ganzen Schmu auch verzichten, macht es sich damit aber meist unnötig schwer. Das soll aber nicht heißen, dass OOP-Programmierung nun die Lösung aller Probleme wäre, man kann auch in OOP Mist schreiben, ebenso wie man auch prozedural gute Programme hinbekommen kann, der Aufwand ist aber (zumindest bei Neuentwicklungen) um Einiges größer.

P.S.: Zwischenzeitlich wurde zwar ein neuer Post geschrieben, trotzdem schicke ich das mal ab.
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
 
Perlsau
(Gast)

n/a Beiträge
 
#15

AW: Warum und wann eine Klasse benutzen

  Alt 16. Okt 2013, 20:54
Was bringt es in einem "Hallo World" Tool, den Wert einer Box in eine Klasse zu verlagern, verarbeiten und zurück zu geben?
Nichts. Mit anderen Worten: Wenn du nur "Hallo World" Tools schreiben willst, brauchst du dich um Klassen nicht zu kümmern. Möchtest du allerdings eines schönen Tages eine etwas komplexere Anwendung, die gut erweiter- und wartbar sein soll, entwickeln, wäre es schon angebracht, entsprechende Klassen zu entwickeln. Ich benutze z.B. zur Verarbeiten der Daten aus einer Datenbank grundsätzlich eine Klasse in einer eigenen Unit. Damit schreibe ich meine Datenbankanwendungen weitaus schneller und übersichtlicher. Auch bei Grafik-Anwendungen empfiehlt es sich, eine Klasse zu entwickeln, die alle benötigten Methoden zur Verfügung stellt. Wenn ich z.B. eine komplexe Grafik-Ausgabe entwickle, der ich den jeweiligen Canvas als Parameter mitgebe, kann ich diese Methode ebenso für die Bildschirm- wie für die Druckerausgabe verwenden.

Ansonsten schließe ich mich der Ansicht Daniels an, wonach es auf diese doch eher allgemeine Frage keine konkretere Antwort geben kann als: Lese dich ein in OOP und Klassendesign.
 
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#16

AW: Warum und wann eine Klasse benutzen

  Alt 17. Okt 2013, 00:35
Für mich liegt der merkbarste Effekt beim Verwenden von Klassen ganz naiv betrachtet darin, dass ich zusammengehörige Daten und Verhaltensweisen in einen gemeinsamen "Container" packen kann. Dies ist vor allem dann immer wieder schön, wenn ich mehrere Instanzen solcher Container brauche, die zwar alle gleich strukturiert sind und sich gleich verhalten, aber unterschiedliche Daten tragen müssen. Zudem kann ich gleich Verhaltensweisen in den Container integrieren, um die ich mich nachher nie wieder kümmern muss - ich muss mir nichtmals Sorgen darum machen, wie meine Datenstrukturen dazu auszusehen haben; die ist ja ebenfalls schon drin. (Im Gegensatz z.B. zu einer Prozedur, die dafür geschrieben ist X Werte aus Y Arrays zu verarbeiten. Hier müsste ich immer darauf achten, eben genau passende Arrays zu erstellen. Diese Art zu arbeiten wird mit zunehmender Parallelisierung lustigerweise aber schon wieder interessanter.)

Ich bin zwar mit QBASIC und TP5 aufgewachsen, habe mich aber schon so sehr an OOP gewöhnt, dass ich es mehr oder weniger als die "natürliche" Art zu programmieren empfinde. Den Eindruck fördert bei mir sicherlich auch, dass ich es leicht finde Echtwelt-Probleme in Form von Klassen und Objekten abzubilden. Ich finde, es ist einfach oft eine schon gute Terminologie für eine Fülle an Alltagsaufgaben und -Daten. Zumindest passt es oft für die Dinge, die ich zum Brötchenverdienen schreibe echt gut. Umfangreiche Hierarchien waren bislang bei mir aber nicht oft angesagt, oftmals nur um leicht underschiedliche Objekte in gemeinsamen Listen verarbeiten zu können. Entwickler von Komponenten-Suits sind da sicherlich weit mehr von betroffen.

Insgesamt empfinde ich den Wiederverwendungswert bei Klassen als für höher. Zumindest so lange es sich nicht nur um einzelne kleine Helferlein in Prozedurform handelt. Diese landen bei mir oftmals dann auch gesammelt lose in einer Unit. Entscheidend für die Geschäftslogik sind davon aber kaum welche, da geht es oft um nicht mehr als z.B. Strings in gewisser Weise zentral zu formatieren o.ä.


Lösbar sind bestimmt fast alle Probleme mit fast allen Programmier-Paradigmen, und je nach dem wie geübt der Programmierer darin ist auch ähnlich schnell und (für ihn) komfortabel. Ich finde es eigentlich immer nur wichtig, sich nicht auf einen Weg einzuschießen. Oft ist es nämlich die Aufweichung in andere Paradigmen, oder gar Mischung mehrerer, die einem die elegantesten Möglichkeiten eröffnen. So wie Delphi z.B. Prozedural und OOP in einer Sprache nahtlos vereint. Es ist sicherlich nicht verkehrt, sich alles mal intensiv zu beschauen, und nachher auch zu benutzen wo angebracht. Und letztlich kommt wie so oft auch eine große Protion persönlichen Geschmacks dazu. (Oder ersatzweise firmeninterne Standards )
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (17. Okt 2013 um 00:39 Uhr)
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: Warum und wann eine Klasse benutzen

  Alt 17. Okt 2013, 08:05
Auch für eine "Hello World" Anwendung kann die Verwendung von Klassen hilfreich sein.
Genau dann, wenn das Ausgabeziel (MessageBox, Konsole, Drucker) dynamisch sein soll.

Delphi-Quellcode:
unit Outputter;

interface

type
  TOutputter = class
  protected
    procedure DoOutput( const AStr : string ); virtual; abstract;
  public
    procedure Output( const AStr : string ); overload;
    procedure Output( const AFormat : string; AArgs : array of const ); overload;
  end;

  TNullOutputter = class( TOutputter )
  protected
    procedure DoOutput( const AStr : string ); override;
  end;

  TConsoleOutputter = class( TOutputter )
  protected
    procedure DoOutput( const AStr : string ); override;
  end;

implementation

uses
  System.SysUtils, Winapi.Windows;

{ TOutputter }

procedure TOutputter.Output( const AStr : string );
begin
  DoOutput( AStr );
end;

procedure TOutputter.Output( const AFormat : string; AArgs : array of const );
begin
  Output( Format( AFormat, AArgs ) );
end;

{ TNullOutputter }

procedure TNullOutputter.DoOutput( const AStr : string );
begin
  // Nichts machen
end;

{ TConsoleOutputter }

procedure TConsoleOutputter.DoOutput( const AStr : string );
begin
  AllocConsole;
  try
    Writeln( AStr );
    Writeln;
    Write( 'Press any key to continue... ' );
    ReadLn;
  finally
    FreeConsole;
  end;
end;

end.
Delphi-Quellcode:
unit Outputter_VCL;

interface

uses
  Outputter;

type
  TMsgOutputter = class( TOutputter )
  protected
    procedure DoOutput( const AStr : string ); override;
  end;

  TPrintOutputter = class( TOutputter )
  protected
    procedure DoOutput( const AStr : string ); override;
  end;

implementation

uses
  Vcl.Dialogs, Vcl.Printers;

{ TMsgOutputter }

procedure TMsgOutputter.DoOutput( const AStr : string );
begin
  inherited;
  ShowMessage( AStr );
end;

{ TPrintOutputter }

procedure TPrintOutputter.DoOutput( const AStr : string );
begin
  inherited;
  Printer.BeginDoc;
  try
    Printer.Canvas.TextOut( 100, 100, AStr );
    Printer.EndDoc;
  except
    Printer.Abort;
  end;
end;

end.
Delphi-Quellcode:
unit Main_FormU;

interface

uses
  Outputter,

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TMain_Form = class( TForm )
    Output_RadioGroup : TRadioGroup;
    Hello_Button : TButton;
    procedure Output_RadioGroupClick( Sender : TObject );
    procedure Hello_ButtonClick( Sender : TObject );
  private
    FOutput : TOutputter;
    procedure SetOutput( const Value : TOutputter );
  protected
    property Output : TOutputter read FOutput write SetOutput;
  public
    constructor Create( AOwner : TComponent ); override;
    destructor Destroy; override;

  end;

var
  Main_Form : TMain_Form;

implementation

{$R *.dfm}

uses
  Outputter_VCL;

{ TMain_Form }

constructor TMain_Form.Create( AOwner : TComponent );
begin
  inherited;
  Output := TNullOutputter.Create;
end;

destructor TMain_Form.Destroy;
begin
  Output := nil;
  inherited;
end;

procedure TMain_Form.Hello_ButtonClick( Sender : TObject );
begin
  // Ausgabe von "Hello World"
  Output.Output( 'Hello World' );
end;

procedure TMain_Form.Output_RadioGroupClick( Sender : TObject );
begin
  // Ausgabekanal festlegen
  case Output_RadioGroup.ItemIndex of
    0 :
      Output := TNullOutputter.Create;
    1 :
      Output := TMsgOutputter.Create;
    2 :
      Output := TConsoleOutputter.Create;
    3 :
      Output := TPrintOutputter.Create;
  end;
end;

procedure TMain_Form.SetOutput( const Value : TOutputter );
begin
  if Value = FOutput
  then
    Exit;

  FOutput.Free;
  FOutput := Value;
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
 
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
80 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: Warum und wann eine Klasse benutzen

  Alt 17. Okt 2013, 08:51
Danke noch Mal an Alle. Vor Allem an die super Beispiele.
Ich lerne Autodidakt, damit kann ich am meisten was anfangen. Ich analysiere es so lange bis ich es verstanden habe. Meisten funktioniert es ganz gut. (leider nicht immer)

Ich bin gerade mit den Antworten etwas überlastet.
Muss das Ganze erst Mal analysieren.
Obwohl ich noch mit einigen Sache meine Schwierigkeiten habe, sehe ich langsam den Sinn dahinter.
Tatsache ist, ich habe mir nun stark vorgenommen das Buch über OOP durchzusehen.
Ich bin noch auf der Suche nach einem Buch der meiner Art zu lernen am weitesten entspricht, habe aber schon ein paar Ansätze, das hilft.
Bist dato habe ich mir immer ein passende Unit gebastelt, die ich natürlich wiederverwenden konnte.
Wenn man aber tiefer nachdenkt, bieten Klassen doch enorm mehr Möglichkeiten.
Das einzige was ich als ERSTES in die Birne rein kriegen muss.
Es sind Objekte. Den Umgang mit dem Speicher muss ich mir rein prägen.
Damit tue ich mir noch etwas schwer. (unbewusst nehme ich an).
 
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Warum und wann eine Klasse benutzen

  Alt 17. Okt 2013, 09:15
Das kommt mir bekannt vor.
Ich habe damals (ich gleube bei Delphi 1) die Erklärung von OOP mehrfach gelesen und immer wieder gedacht: "Hää? Wie jetzt? Wieso? Hä? ... Ahhh! ... Nee? ... Ach so..." usw.

Benutze einfach Objekte und globale Daten und Prozeduren und dann wirst Du mit der Zeit erkennen, wann welche Form welche Vorteile bietet.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
 
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

AW: Warum und wann eine Klasse benutzen

  Alt 17. Okt 2013, 09:59
Eigentlich ist die Antwort ganz simpel - und zugleich sehr kompliziert.

Ich benutze mal das Beispiel, mit dem ich meinem Kollegen, seines Zeichens krasser Anfänger, die Augen öffnen konnte. Sein "Fachgebiet" damals waren MP3-Player jeder Art.

Nun ist es nicht allzu schwer einen MP3-Player zu stricken. BASS.DLL rein und damit ist er schon fast fertig. Aber das ist langweilig, also verzichten wir auf die BASS.DLL und machen das alles selbst. Also schreiben wir ein paar Routinen, die DirectSound initialisieren, uns einen DirectSound-Kontext holen, Daten an DS senden und so weiter. Das sind alles Basics und wir haben dann u.a. folgende Routinen:

- InitDirectSound
- GetDSContext
- SendToDS
- CloseDSContext
- FinalizeDirectSound

Anschließend greifen wir uns das simple Format "WAV". Das hat einen Header und dann rohe Sounddaten. Also basteln wir weitere Routinen:

- OpenWAVFile
- ProcessWAVHeader
- ProcessChunkofWAVData
- CloseWAVFile

Wesentliche Daten werden in Records gespeichert und in globalen Variablen gehalten *hust* - typisch Anfänger halt.

However. Wenn das alles implementiert ist, klickt man auf "PLAY" und das zuvor selektierte WAV-File wird abgespielt. Bis hierhin haben wir den Umfang eines normalen Hobbycoder-Projektes erreicht. Und bis hierher machen Klassen auch kaum einen Sinn, das ganze geht auch mit dem Programmierparadigma "strukturiert" zu bauen.

Aber nun verlassen wir diese Ebene. Wir haben plötzlich die absonderliche Idee und möchten jetzt auch MP3-Files abspielen.

Im bisherigen Schema mußt du nun ALLE ROUTINEN, die sich mit Dateien befassen, ERNEUT schreiben. Also Routinen wie
- OpenMP3File
- ProcessMP3Header
- ProcessChunkofMP3Data
- CloseMP3File

Selbst dann, wenn der Code völlig identisch zu dem der WAV-Files ist - natürlich könnte man sagen "okay, rufe ich einfach die WAV-Routinen auf". Kann man machen, aber dann hast du den berühmten Spaghetti-Code produziert und nach 6 Monaten fragst du dich "Hä, ich fummel hier mit MP3 herum, wieso ruf ich da nu WAV-Routinen auf ?!?". Macht man also nicht.

Auch brauchst du nun alle die schönen Records ein weiteres Mal. Und die globalen Variablen.

Nun hast du 2 Sätze an Routinen gebaut und mehrfach identischen Code mitsamt fast identischer Datenstrukturen produziert. Hier kommt nun OOP ins Spiel.

Man bastelt sich eine Klasse namens "WAVFile". Wir schreiben uns die Methoden
- OpenFile
- ProcessHeader
- ProcessData
- CloseFile

Da wir mit WAV anfangen, kann unser erster Entwurf, genauso wie oben am Anfang, nur mit WAV umgehen. Natürlich integrieren wir die Records in diese Klasse und - oha - globale Variablen sind eigentlich nicht mehr nötig.

Fügen wir nun MP3 hinzu, vererben wir kurzerhand (Hier fiel vor 25 Jahren bei meinem Bruder der Groschen ). Wir leiten eine Klasse MP3File von WAVFile ab. Da OpenFile und CloseFile identisch für WAV und MP3 sind, brauchen wir das gar nicht mehr programmieren - Zeit, Code und Fehlersuch-Ärger gespart. Wir implementieren nur noch ProcessHeader und ProcessData und PAFF - können wir MP3, nachdem wir ein paar Anpassungen an den internen Strukturen gemacht haben.

Und nun kommt OGG hinzu - nach altem Schema bastelst du nun wieder 4 Routinen und einen Satz Records, von denen wieder einiges identisch ist und du hast nun etliche Male denselben Code da stehen. In OOP leitest du wieder von WAVFile ab, schreibst nur neuen Code und hast Zeit, Code und Fehlersuch-Ärger gespart.

Tja, und dann... Dann möchtest du nicht nur DirectSound unterstützen, sondern auch das brandneue Soundsystem "OpenSound". Die gleiche Leier.

Ergo: In Kleinstprogrammen, wie sie Anfänger basteln und die kaum über den Umfang von 5000 Zeilen hinauskommen, wirkt OOP völlig sinnlos und produziert sogar scheinbar mehr Aufwand. Die Stärken der OOP kommen erst in größeren Projekten voll durch - und je größer und komplexer, desto effektiver ist OOP.

Mein Tip: Auch wenn es sinnlos oder aufwändig erscheint - programmiere immer objektorientiert. Hast du dich erstmal an den inzwischen prähistorisch anmutenden strukturierten Stil gewöhnt, wird es irgendwann schwer, wieder auf OOP umzuschwenken. Viele, viele, viele Hobbyprogrammierer bleiben genau das: Hobbyprogrammierer, die auch nach der 50. Version ihres MP3-Players noch einen neuen anfangen und doch immer wieder dieselben Features basteln und nur die Oberfläche ändert sich. Etliche von diesen hören auch wieder auf mit dem Programmieren.

Ein paar allerdings infizieren sich unheilbar mit dem Coder-Virus und womöglich bist du auch einer von diesen Irren Dann sind Programme im 50k-Bereich eher das übliche Tagewerk und dann haut OOP richtig rein.

Geändert von OlafSt (17. Okt 2013 um 10:02 Uhr)
 
Thema geschlossen
Seite 2 von 4     12 34   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:28 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