AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fragen zum Singelton Entwurfsmuster

Ein Thema von GroHae · begonnen am 28. Jul 2007 · letzter Beitrag vom 28. Jul 2007
Antwort Antwort
GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#1

Fragen zum Singelton Entwurfsmuster

  Alt 28. Jul 2007, 16:35
Hallo zusammen,

ich schäme mich ein bischen aber ich verstehe da ein paar Sachen nicht.

Delphi2006 erstellt mir beim Singelton folgendes:
Delphi-Quellcode:
type
  TSingleton = class
  strict private
    constructor Create;
  class var
    FInstance:TSingleton;

  public
    class function GetInstance: TSingleton;
    procedure MeldeDich; // von mir ;-)
  end;
1) Was genau bedeuten die Anweisungen "class var" und "class function" ?
In der Hilfe steht was von klassenstatisch , aber was ist das?

2) Warum brauche ich nicht "Static" angeben. (So verstehe ich die Hilfe)
Zitat:
Klassenstatische Methoden
Auf klassenstatische Methoden kann, wie auf Klassenmethoden, ohne Objektreferenz zugegriffen werden. Im Gegensatz zu regulären Klassenmethoden haben klassenstatische Methoden keinen Self-Parameter. Sie können außerdem auf keine Instanzelemente zugreifen. (Sie können aber auf Klassenfelder, Klasseneigenschaften und Klassenmethoden zugreifen.) Wiederum im Gegensatz zu Klassenmethoden können klassenstatische Methoden nicht als virtual deklariert werden.
Um eine Methode als klassenstatisch zu deklarieren, fügen Sie das Wort static an die Deklaration an:
type
TMyClass = class
strict private
class var
FX : Integer;

strict protected

// Hinweis: Methoden für den Zugriff auf Klasseneigenschaften müssen als klassenstatisch deklariert werden.
class function GetX: Integer; static;
class procedure SetX(val: Integer); static;

public
class property X: Integer read GetX write SetX;
class procedure StatProc(s: String); static;
end;


Wie eine Klassenmethode kann eine klassenstatische Methode über den Klassentyp (also ohne Objektreferenz) aufgerufen werden, z. B.:
TMyClass.X := 17;
TMyClass.StatProc('Hello');
3) Wie würde man so ein Object wieder frei geben?
Wenn ich es mit Free frei gebe kann ich immer noch MeldeDich aufrufen.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  SchokoladenKocher.Free;
  SchokoladenKocher.MeldeDich; // klappt
end;
Wenn ich dann noch mal Free aufrufe gibt es eine Zugriffsverletzung.

Ihr sieht: ich weiß nicht wirklich was ich da mache
Grüße

Thomas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Fragen zum Singelton Entwurfsmuster

  Alt 28. Jul 2007, 17:29
Hallo Thomas,

unabhängig vom singleton pattern und auch ohne dass ich Delphi 2006 kenne:

(1) class var signalisiert offensichtlich ein sogenanntes Klassenfeld, class function kennzeichnet eine Methode, die du wie auch den Konstruktor mit dem Klassennamen aufrufst, d.h. du musst nicht erst eine Instanz der Klasse bilden.

(2) GetInstance() kommt ohne static aus, weil nicht auf eine Klasseneigenschaft zugegriffen wird, sonder direkt auf ein Klassenfeld.

(3) Die Klasse samt ihren Klassenfeldern kannst du nicht freigeben. Ein Objekt dieser Klasse kannst du mit Free() freigeben. Der Übersetzer hält dich nicht davon ab, dass du den freigegebenen Objektzeiger weiter verwendest, aber das Ergebnis zur Laufzeit kann unterschiedlich ausfallen, jenachdem ob der ursprünglich belegte Speicher noch den alten Inhalt aufweist oder nicht. Mit FreeAndNil(obj) anstelle von obj.Free kannst du einen solchen Objektzeiger (von Dijkstra einmal dangling pointer genannt) zurücksetzen, so dass zumindest die Laufzeitfehlermeldung aussagekräftiger wird.

Grüße vom marabu
  Mit Zitat antworten Zitat
Namenloser

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

Re: Fragen zum Singelton Entwurfsmuster

  Alt 28. Jul 2007, 17:42
Mal ein paar Fragen am Rande:

class procedure/class function kannte ich bereits, aber "class var" ist mir neu. Ist das so eine Art globale Variable, auf die man nur innerhalb der Klasse zugreifen kann? Sowas kenne ich nämlich von PHP (habs aber noch nie gebraucht ). Das gibt es aber erst seit D2006, oder?
Achja, was sind überhaupt "Singleton-Patterns", habe ich noch nie von gehört?
  Mit Zitat antworten Zitat
GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Fragen zum Singelton Entwurfsmuster

  Alt 28. Jul 2007, 18:41
@marabu: Danke für die Erklärung. Jetzt ist es mir ein bisschen klarer.

@NamenLozer
Patterns sind Entwursmuster. Das sind Lösungsvorschläge, Anleitungen, fest definierte Vorlagen, um irgendein Standardproblem zu lösen.

Das Singleton-Pattern ist ein Muster das dafür sorgt, sicherzustellen, das dieses Objekt nur einmal angelegt werden kann.

Alles besser Erklärt bei http://de.wikipedia.org/wiki/Entwurfsmuster
Grüße

Thomas
  Mit Zitat antworten Zitat
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 21:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf