AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch Was nervt euch so, während der Programmierung oder so allgemein
Thema durchsuchen
Ansicht
Themen-Optionen

Was nervt euch so, während der Programmierung oder so allgemein

Ein Thema von himitsu · begonnen am 26. Jun 2010 · letzter Beitrag vom 3. Mai 2013
Thema geschlossen
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#1

AW: Was nervt euch so, wärend der Programmierung.

  Alt 8. Jun 2011, 22:01
Daß die Generics unbedingt die Vererbungslinie schrotten müssen, bzw. daß die gernerischen Basisklassen mit den "Alten" nichts gemeinsam haben
TList<> ist kein Nachfahre von TList.

Die könnten ja sonst auch zu praktisch sein und ich hätt' sie jetzt für was ganz Nettes nutzen können, aber so.....

und sowas geht och nich
Delphi-Quellcode:
type
  TMyGen<T: class> = class(T)
  end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Jun 2011 um 22:13 Uhr)
 
Benutzerbild von stahli
stahli

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

AW: Was nervt euch so, wärend der Programmierung.

  Alt 8. Jun 2011, 22:09
Das stimmt und könnte auch in den Wünsche+Träume-Thread aufgenommen werden (wenn das dort bei den Verantwortlichen gehört wird ).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Was nervt euch so, wärend der Programmierung.

  Alt 8. Jun 2011, 22:36
Mich nervt es, wen ich erst gar nicht programmieren darf, sondern es heißt: "Guck mal, ob das und das mit der und der Technologie möglich ist" und man dann nur am Recherchieren ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.982 Beiträge
 
Delphi 12 Athens
 
#4

AW: Was nervt euch so, wärend der Programmierung.

  Alt 8. Jun 2011, 22:52
Daß die Generics unbedingt die Vererbungslinie schrotten müssen, bzw. daß die gernerischen Basisklassen mit den "Alten" nichts gemeinsam haben
Naja, wie sollte man das auch umsetzen?

und sowas geht och nich
Delphi-Quellcode:
type
  TMyGen<T: class> = class(T)
  end;
Hmm, sieht für mich erst einmal wenig sinnvoll aus. Wofür braucht man das?

Was mich allerdings wirklich nervt (insbesondere bei einigen generischen Klassen) ist, dass sehr viele Methoden nicht virtuell sind, die für eine Erweiterung einer Klasse essentiell wären... Auf diese Weise muss man viel Code neu schreiben, obwohl es sonst einfach nur 3 Zeilen als Erweiterung einer Klasse wären...
Sebastian Jänicke
AppCentral
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Was nervt euch so, wärend der Programmierung.

  Alt 8. Jun 2011, 23:12
Ich bin mir nicht sicher, ob die Intention des Threadstarters sich auf sprachliche Unzulänglichkeiten bezog oder ob er so, die Umstände am Arbeitsplatz meinte.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von BUG
BUG

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

AW: Was nervt euch so, wärend der Programmierung.

  Alt 8. Jun 2011, 23:27
Daß die Generics unbedingt die Vererbungslinie schrotten müssen, bzw. daß die gernerischen Basisklassen mit den "Alten" nichts gemeinsam haben
[...]
Hmm, sieht für mich erst einmal wenig sinnvoll aus. Wofür braucht man das?
Delphi-Quellcode:
type
  TCar = class(TRoadUser)
  public
    procedure honk;
  end;

type
  TTruck<T: TCargo> = class(TCar)
  public
    procedure store(cargo: T);
    function load: T;
  end;
Wenn ich das jetzt richtig verstanden habe, kann man jetzt nicht feststellen, ob TTruck<TStandardPacket> ein TCar ist um dann honk aufzurufen (Könnte ja auch ein Fußgänger ohne Hupe sein)
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
 
Benutzerbild von stahli
stahli

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

AW: Was nervt euch so, wärend der Programmierung.

  Alt 9. Jun 2011, 00:06
Das wird etwas speziell für diesen Thread, aber mal kurz:
TTruck ist keine Ableitung von TCar sondern direkt eine Ableitung von TObject.
Man kann den daher Track z.B. nicht an eine Methode übergeben, die ein Car verlangt.
Hier gab es mal etwas dazu (mein Beispiel in #13).
Man kann also bestehende Klassen nicht generisch erweitern, sondern "nur" neue generische Klassen erzeugen (mit meinen Worten).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
 
Benutzerbild von BUG
BUG

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

AW: Was nervt euch so, wärend der Programmierung.

  Alt 9. Jun 2011, 00:08
TTruck ist keine Ableitung von TCar sondern direkt eine Ableitung von TObject.
Man kann den daher Track z.B. nicht an eine Methode übergeben, die ein Car verlangt.
Ich vermute ja, dass es das ist, was himitsu bemängelt.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG ( 9. Jun 2011 um 00:11 Uhr)
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#9

AW: Was nervt euch so, wärend der Programmierung.

  Alt 9. Jun 2011, 00:12
[edit]
jupp
[/edit]

Nja wenn, dann könnte man von Klassen ableiten, dieser erweitern und bliebe dennoch kompatibel zur Vorgängerklasse > Vererbung.

In meinem Fall wollte ich gerne mehrere Klassen nachträglich erweitern.
> wie z.B. TEdit, TMemo und Co.
Überschreiben wollte ich aber nur funktionen, welche schon in TWinControl vorhanden und somit überll gleich sind, on der Signatur her.
Nun muß ich aber jede Klasse einzeln erweitern, wo es einmal auch gereicht hätte.

Delphi-Quellcode:
type
  TMyGen<T: TCustomEdit> = class(T)
  protected
    function GetText: String; override;
  end;

  TMyEdit = TMyGen<TEdit>;
  TMyMemo = TMyGen<TMemo>;
Sowas geht ja eben auch nicht, da TMyGen<> kein Nachfahre von TEdit ist, obwohl man das glauben könnte.
Delphi-Quellcode:
type
  TMyGen<T> = class(TEdit)
  end;
Aber dafür bräuchte man eben einen Compiler, welcher nicht nur einmal durch den Code rauscht, also "weit" vorausschauend arbeiten kann,
bzw. welcher die Generics nicht gleich versucht in Code umzusetzen, sondern ihn eher als Macro interpretiert und dann später erst fertig compiliert, also bei dessen Nutzung.
Makros im Allgemeinen wären ja auch noch sooooo schlecht.

@Luckie:
Zitat:
egal ob es mit der/einer Programmiersprache zu tun hat oder nur allgemein mit dem Programmieren oder etwas damit Zusammenhängendem zu tun hat.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Jun 2011 um 00:14 Uhr)
 
Benutzerbild von Stevie
Stevie

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

AW: Was nervt euch so, wärend der Programmierung.

  Alt 9. Jun 2011, 00:54
@BUG und stahli:

Doch, in dem Fall ist TTruck<TStandardPacket> von TCar abgeleitet und man kann auch ganz normal auf alle TCar Methoden/Properties zugreifen.

TList<T> ist nur deshalb kein Nachfahre von TList, weils einfach nicht davon abgeleitet ist, sondern von TEnumerable<T> (und das von TObject)

In Delphi geht es nunmal nicht so einfach, dass man einen generischen Typen von einem nicht generischen Typen ableitet, da Delphi nunmal keinen root type hat. Man kann es nachbilden bis zu einem gewissen Grad, aber was machst du, wenn du ne TList<IMyInterface> hast und das als TList übergibst, wo jedes Element nur nen Pointer ist? Was ist mit der Referenzzählung? Was passiert bei anderen Datentypen... etc

@Himitsu:

Das nennt man Covarianz (die in Delphi fehlt) und ich glaube, das hab ich auch im "Wünsch dir was" Thread aufgeführt

Was du vor hast, klingt nett, hat aber nix mit Generics zu tun, wie sie allgemein funktionieren. Ein Typenparameter steuert niemals die Vererbungshierarchie.
TFoo<TButton> wäre covariant zu TFoo<TWinControl> (du kannst in diesem Fall ohne Probleme nen hardcast machen und alles funktioniert weiterhin)

Wäre die Definition aber TFoo<T> = class(T) dann wäre der Vorgänger von TFoo<TButton> nämlich TButton von TFoo<TWinControl> wäre es TWinControl, womit die beiden generischen Typen nicht mehr covariant wären.

Was du willst, sind Extensions wie es sie in .Net gibt.

Sowas geht ja eben auch nicht, da TMyGen<> kein Nachfahre von TEdit ist, obwohl man das glauben könnte.
Delphi-Quellcode:
type
  TMyGen<T> = class(TEdit)
  end;
Stimmt nicht, obiger Code ist völlig in Ordnung.
Zu dem anderen Beispiel, warum nicht das?
Delphi-Quellcode:
type
  TMyGen<T: TCustomEdit> = class(TCustomEdit)
   protected
     function GetText: String; override;
   end;
Um das Thema zu vertiefen, würd ich dazu raten, einen seperaten Thread zu eröffnen.

@Luckie:
Mich nervt es, wen manche Entwickler immer direkt losprogrammieren, ohne zu recherchieren, ob es diese Funktionalität in irgendeiner Funktion oder Unit schon gibt und für alles das Rad x-mal neu erfunden wird, weil man entweder zu blöd oder zu faul zum suchen ist.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 9. Jun 2011 um 00:59 Uhr)
 
Thema geschlossen
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:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
Untitled document This thread Refback 7. Nov 2011 09:54

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz