AGB  ·  Datenschutz  ·  Impressum  







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

Lose Funktionen in Klassen kapseln?

Ein Thema von Pseudemys Nelsoni · begonnen am 17. Mai 2005 · letzter Beitrag vom 17. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 08:05
Moin,

ich habe ne menge lose funktionen in einer meiner unit die ca so aussehen;

AddTok()
GetTok()
NumTok()

usw... also alles token funktionen....

Ich hab eigentlich bis jetzt keine Probleme damit gehabt, habe aber schon oft von Leuten(hi Robert_G ) hier im Forum gehört das es besser(?) wäre diese in eine eigene Klasse zu packen.
Was wäre der Vorteil? Mal abgesehen davon das die Namen der Funktionen noch frei sind...

Ich sehe darin eigentlich nur einen Nachteil, nämlich, das man den Kram erzeigen muss(Create) und wieder freigeben...

Also, kurze Frage: Lose lassen oder in Klasse packen?
Mario
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 08:10
Hallo Pseudemys Nelsoni,

es ist Geschmacksache. Du kannst die Funktionen auch ueber die Unit ansprechen (z.B. TokenizeUn.AddTok() anstatt AddTok() schreiben), um Verwechslungen zu vermeiden. Auf der anderen Seite kannst du aber auch eine Klasse erstellen und anschliessend immer mit dem Objekt arbeiten.
Wie gesagt, es ist in so einem Fall wirklich Geschmacksache. Eventuell liest du dir auch mal dieses Thema durch, die Materie ist irgendwie dieselbe.

@All: ich bitte euch sachlich zu bleiben. Kommentare wie "verwende OOP weils besser" ist, oder "lass es so, OOP ist Schwachsinn" sind ueberhaupt nicht sinnvoll und haben hier nichts zu suchen. Danke.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 08:35
Moin alceaus,

Genau, man kann ja die Unit voranstellen, deswegen versteh ich auch nicht wieso man das in Klassen packen sollte . Wenn es deswegen kein OOP sein soll, dann ist kein Programm OOP, denn die funktionen der VCL sind ja alle lose, oder?
Mario
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 08:49
Hallo Pseudemys Nelsoni,

Zitat von Pseudemys Nelsoni:
Genau, man kann ja die Unit voranstellen, deswegen versteh ich auch nicht wieso man das in Klassen packen sollte . Wenn es deswegen kein OOP sein soll, dann ist kein Programm OOP, denn die funktionen der VCL sind ja alle lose, oder?
der Vorteil der Klasse ist in diesem Fall, dass du deine Funktionen an das jeweilige Objekt gebunden hast. Ich mach mal ein Beispiel fuer etwas ohne OOP:
Delphi-Quellcode:
type
  TToken = record;
    //....
  end;
function AddTok(...): ...;
function RemoveTok(...): ...;

//.....

var
  Tok1, Tok2: TToken;

//.....

AddTok(Tok1, ...);
AddTok(Tok2, ...);
Eigentlich ist nichts an dem Prinzip falsch.

Delphi-Quellcode:
type
  TToken = class(TObject)
    public
      function AddTok(...): ...;
      function RemoveTok(...): ...;
  end;

//.....

var
  Tok1, Tok2: TToken;

//.....

Tok1 := TToken.Create;
Tok2 := TToken.Create;
Tok1.AddTok(...);
Tok2.AddTok(...);
Ich hab jetzt mal die Konstruktoren weggelassen. Der Vorteil ist dass die Funktionen genau auf das eine Objekt gebunden sind, auch wenn intern nur die Referenz uebergeben wird dass du mit Self arbeiten kannst

Zur VCL: das meisste ist (mehr oder weniger schoene) OOP, aber es gibt auch Ausnahmen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  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
 
#5

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 13:19
was müsste in den konstruktoren denn drinstehen?
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
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 13:24
Hallo Lukas,

Zitat von DGL-luke:
was müsste in den konstruktoren denn drinstehen?
im Constructor kann man z.B. Anfangswerte setzen, eventuelle Unterobjekte erstellen usw. Das kommt ganz auf die Klasse an. Nachdem meine Klasse nur Methoden und keine Properties hat (weil es eine Beispielklasse ist ), sind in diesem Fall auch nicht wirklich Initialisierungen wichtig. Ohne properties wuerde die Klasse aber auch keinen Sinn machen.
Wie gesagt, in meinen Augen liegt der Vorteil darin, dass man alles gesammelt hat: Methoden und Properties. Ich denke dass Mario zur Zeit mit records arbeitet, welche die properties des Tokenizers beinhalten, und die Methoden ausserhalb hat. In einer Klasse waere alles schoen gesammelt, aber wie gesagt, es ist Geschmacksache

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 13:45
Es ist kein Problem, "normale" Funktion/Prozeduren ist einer Klasse unterzubringen.
Wichtig ist nur, dass die Methoden als Klassenmethoden angelegt werden.
Delphi-Quellcode:
type
  TToken = class(TObject)
    public
      // man beachte das Keyword "class"
      // in anderen Programmiersprachen würde man "static" schreiben
      class function AddTok(...): ...;
      class function RemoveTok(...): ...;
  end;
Klassenmethoden kann man aufrufen ohne zuvor ein Objekt erzeugt zu haben:
   TToken.AddTok(); Man braucht auch den Konstruktor oder Destruktor nicht überschreiben, weil es keine Daten im Objekt gibt.

Im .NET Framework ist IMHO alles in Klassen gekapselt.
Ob man "normale" Funktionen/Prozeduren in Klassenmethoden umwandelt ist Geschmackssache;
bei der Performance und Speicherverbrauch gibt es keinen Unterschied.
Vorteil: man sieht sofort am Klassennamen vorhin die Methode gehört
Nachteil: mehr Schreibarbeit
Andreas
  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
 
#8

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 16:30
in diesen static funktionen kann man dann aber kein self verwenden, oder?
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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 16:33
Zitat von DGL-luke:
in diesen static funktionen kann man dann aber kein self verwenden, oder?
Der Compiler erlaubt es nicht, da es den versteckten Self-Parameter in Klassenmethoden nicht gibt.
Andreas
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Lose Funktionen in Klassen kapseln?

  Alt 17. Mai 2005, 16:36
Zitat von DGL-luke:
in diesen static funktionen kann man dann aber kein self verwenden, oder?
Wie denn auch, sie werden ja auf den Typ, nicht auf die Instanz angewendet.
Kommt mir das nur so vor, oder wäre nicht bei dem hier...
Delphi-Quellcode:
type
  TToken = class(TObject)
    public
      // man beachte das Keyword "class"
      // in anderen Programmiersprachen würde man "static" schreiben
      class function AddTok(...): ...;
      class function RemoveTok(...): ...;
  end;
...eine Liste von Tokens ganz nett? :gruebel.
Die bekommt Add(aToken :TToken), Remove(aToken :TToken) plus weitere "Nettigkeiten" und alle sind zufrieden und befreit von "Streuner"-Funktionen.
  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 15:13 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