AGB  ·  Datenschutz  ·  Impressum  







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

Generische Ableitung einer Klasse

Ein Thema von s.h.a.r.k · begonnen am 5. Jul 2011 · letzter Beitrag vom 6. Jul 2011
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 14:45
Das hat doch nichts damit zu tun was er will oder braucht

Der Ansatz an sich macht (OOP-technisch) keinen Sinn.

Für sowas sind Class-Helper gedacht.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 14:59
Das hat doch nichts damit zu tun was er will oder braucht
Womit denn sonst?

Der Ansatz an sich macht (OOP-technisch) keinen Sinn.
Sinnvoll ist der Ansatz schon, ob's jetzt OOP oder sonstwas für ein Paradigma ist. Statt z.B. eine TThreadedObject<TStringList> zu nutzen könnte man natürlich auch eine TThreadedStringList = class(TStringList) schreiben. Deren Implementation wäre aber bis auf den Namen der Basisklasse identisch mit TThreadedBlubb, TThreadedBlah und TThreadedSchlock. Das schreit doch nach Generics.

Für sowas sind Class-Helper gedacht.
Die waren dafür gedacht, dass man Delphis TObject in .net reinhämmern kann, sonst für nix. Und im konkreten Fall bringen sie AFAIK eh nix, weil der OP ja Felder zur Basisklasse hinzufügen will.
Uli Gerhardt

Geändert von uligerhardt ( 5. Jul 2011 um 15:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 15:23
Das hat doch nichts damit zu tun was er will oder braucht
Womit denn sonst?
Er WILL das vllt. nicht. Aber prinzipiell ist der Sinn einer Ableitung eine bestehende Klasse zu ERWEITERN. Das ist aber aus folgenden Gründen NICHT möglich:

Zitat:
Du kannst keine Methoden überschreiben, du weißt nicht welche Methoden/Properties/Variablen dir zur Verfügung stehen.. Du weißt gar nichts. Wie willst du denn auf dieser Grundlage eine Klasse ableiten/implementieren?
D.h. es wird voraussichtlich niemals einen Compiler geben, der sowas zulässt.
Es macht keinen Unterschied ob er es will/braucht, wenn es einfach nicht geht.

Der Ansatz an sich macht (OOP-technisch) keinen Sinn.
Sinnvoll ist der Ansatz schon, ob's jetzt OOP oder sonstwas für ein Paradigma ist. Statt z.B. eine TThreadedObject<TStringList> zu nutzen könnte man natürlich auch eine TThreadedStringList = class(TStringList) schreiben. Deren Implementation wäre aber bis auf den Namen der Basisklasse identisch mit TThreadedBlubb, TThreadedBlah und TThreadedSchlock. Das schreit doch nach Generics.
Die Grundidee ist gut. Der Ansatz das auf diese Weise mit Generics zu lösen ist schlecht, nicht machbar und OOP-technischer Schwachsinn.

Sowas wie TThreadedObject<TStringList> ist ja durchaus machbar und gut!

TThreadedBlubb, TThreadedBlah und TThreadedSchlock wäre natürlich noch ein Stück schöner, aber das schreit absolut nicht nach Generics. Für sowas sind und waren Generics nicht gedacht und es ist letztendlich einfach nicht machbar.

Für sowas sind Class-Helper gedacht.
Die waren dafür gedacht, dass man Delphis TObject in .net reinhämmern kann, sonst für nix. Und im konkreten Fall bringen sie AFAIK eh nix, weil der OP ja Felder zur Basisklasse hinzufügen will.
Aha..
Class-Helper gehen natürlich nur wenn er keine Felder hinzufügen muss. Die Dinger sind aber in manchen Situationen durchaus nützlich.

Wenns für ihn mit Class-Helpern nicht geht, dann bleibt ihm nur die TThreadedObject<TStringList> Variante oder er muss von jeder Klasse in der er Critical-Sections einbauen will ableiten.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 15:51
D.h. es wird voraussichtlich niemals einen Compiler geben, der sowas zulässt.
Ich hab mal den guten alten BCC55 und meine eingerosteten C++-Kenntnisse rausgekramt und folgendes produziert:
Code:
#include <iostream>
#include <string>

class MyClass
{
public:
  int blubb;
};

class YourClass
{
public:
  std::string blah;
};

template <typename T>
class TThreadedObject: public T
{
public:
  TThreadedObject() { std::cout << "lock" << std::endl; };
  ~TThreadedObject() { std::cout << "unlock" << std::endl; };
};

int main()
{
  TThreadedObject<MyClass> tb;
  TThreadedObject<YourClass> ty;
  tb.blubb = 42;
  ty.blah = "Hallo";
  std::cout << tb.blubb << std::endl;
  std::cout << ty.blah << std::endl;
}
Das lässt sich compilieren, läuft und spuckt erwartungsgemäß
Code:
lock
lock
42
Hallo
unlock
unlock
aus. Ich denke, das ist vom Prinzip her, das was der OP gerne hätte. So eine Art Mixin.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 15:56
Hm, okay... Habe nun wohl langsam verstanden, warum ich das nicht machen kann bzw. der Compiler sich bei sowas quer stellt. Interessant wäre es aber trotzdem gewesen.

Class Helpers können wahrlich ganz schön sein, aber kann man das hier überhaupt anwendbar? Habe noch nie versucht neue Felder einzuführen -- wurde ja erwähnt, dass dies nicht möglich sei.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 16:13
Ein Template, wie Uli es gebaut hat, geht auch ohne weiteres in Delphi. Das hat aber noch lange nix mit Generics zu tun, nur weil Generics mithilfe von Templates implementiert sind.Diese Frage gab es auch mal bei Stack Overflow.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 19:32
Ich hätte noch ne schmutzige Variante:

Man könnte doch über ein Map (zB eine Hashmap) Objektzeigern eine Critical Section zuordnen und dann lock und unlock doch über Class Helper einführen (Die Map sollte dann ihre eigene Critical Section haben bzw. Thread-safe sein.)
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

AW: Generische Ableitung einer Klasse

  Alt 5. Jul 2011, 20:55
@BUG: Die Idee hatte ich auch schon. Allerdings wird es dann dahingehend unschön, dass das mit der Freigabe dann so eine Sache wird. Wobei... eigentlich könnte man sowas schon machen, aber es werden am laufenden Band CriticalSections erzeugt, was dann wiederrum nicht so schön ist. Ich glaube ich bleibe bei meinen einzelnen Ableitungen
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#9

AW: Generische Ableitung einer Klasse

  Alt 6. Jul 2011, 08:26
Habe selbst maximal D2007 (auf einem anderen Arbeitsplatz) gibt es mittlerweile in fortschrittlicheren Delphiversionen so perverses zeug wie "Aspekte"? Und wäre das dann eine Lösung ?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Generische Ableitung einer Klasse

  Alt 6. Jul 2011, 08:40
Habe selbst maximal D2007 (auf einem anderen Arbeitsplatz) gibt es mittlerweile in fortschrittlicheren Delphiversionen so perverses zeug wie "Aspekte"? Und wäre das dann eine Lösung ?
Sowas gibts in Delphi Prism soweit ich weiß. Im "normalen" Delphi gibt es sowas bisher nicht.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:32 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