Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In eigener Klasse properties oder public variablen ?? (https://www.delphipraxis.net/51751-eigener-klasse-properties-oder-public-variablen.html)

etom291272 18. Aug 2005 08:57


In eigener Klasse properties oder public variablen ??
 
Hallo zusammen :!:
Eine Frage an die OOP Spezialisten unter euch :?: :?: :?:

Wann man eine eigene Klasse definiert wan sollte man Properties einsetzen und
wann genügt es einfach public variablen zu definieren :?:

Wenn ich zum Beispiel ein Klasse habe (nehmen wir an die Klasse diehnt dazu
uber die Serielle Schnittstelle Daten zu empfangen) brauch ich zum Beispiel
die fünf Werte für die Serielle Kommunikation (Schnittstelle, Baudrate,..)
Es war doch viel Schreibarbeit die 5 Properties zu tipseln ich hätte imho das
selbe erreicht hätte ich einfach die 5 variablen im Public Teil definiert.

Mir erscheint der Einsatz von Properties imho eigentlich nur Sinnvoll wenn dahinter
eine komplexe Methode Steckt um den Wert zu manipulieren.

:?: :?: :?: :?:

Bitte um Eure Werte Meinung :warn:

Bernhard Geyer 18. Aug 2005 09:02

Re: In eigener Klasse properties oder public variablen ??
 
Properties müssen immer dann verwendet werden wenn:
- Wertüberprüfungen erfolgen müssen (z.B. eine Bautrate von 142 ist mit sicherheit nicht gültig).
- Nicht alle Werte eine Datentyps gültig sind (z.B. ein String maximal 300 Zeichen behinhalten darf aber mindestens 6 Zeichen)
- Zusätzliche Aktionen erfolgen müssen (z.B. Active-Property)
- Wenn es per DFM-Streaming gesichert werden muss (Puplished-Property)

Nach der reinen Lehre darf es keine public Variablen gehben.

Sanchez 18. Aug 2005 09:04

Re: In eigener Klasse properties oder public variablen ??
 
Hallo,
Variablen sollte niemals public sein, das würde der OOP widersprechen. Wenn du wirklich Variablen direkt von außen setzen möchtest, ohne weiter Aktionen auszulösen, dann ist doch die Property auch nicht mehr Schreibarbeit als eine Variable. Einfach die Property (z.B. property Irgendwas : EinTyp;) hinschreiben und Strg-Shift-C drücken.

Außerdem kannst du per Property z.B. den Zugriff aufs auslesen der Variable einschränken. Bei einer Public-Variable darf jeder alles damit machen.

grüße, daniel

etom291272 18. Aug 2005 09:07

Re: In eigener Klasse properties oder public variablen ??
 
:cheers:
@Sanchez

Das das Tastenkürzel bei Properties geht wusste ich nicht Danke !!!
Damit hat sich die Frage erledigt.

Speedmaster 18. Aug 2005 09:15

Re: In eigener Klasse properties oder public variablen ??
 
Zitat:

Zitat von Sanchez
Hallo,
Variablen sollte niemals public sein, das würde der OOP widersprechen. Wenn du wirklich Variablen direkt von außen setzen möchtest, ohne weiter Aktionen auszulösen, dann ist doch die Property auch nicht mehr Schreibarbeit als eine Variable. Einfach die Property (z.B. property Irgendwas : EinTyp;) hinschreiben und Strg-Shift-C drücken.

Außerdem kannst du per Property z.B. den Zugriff aufs auslesen der Variable einschränken. Bei einer Public-Variable darf jeder alles damit machen.

grüße, daniel

Schwachsinn, warum sollte man keine Variable auf public setzen. Warum eine extra property anlegen oder eine Funktion damit du den Wert dieser bekommst.

Selbst Microsoft hält sich nicht an diesen "Angeblichen" Grundsatz der OOP, auch nicht in .NET ( Dort gibts mehr Globale Variablen als du an einer Hand aufzählen kannst )!

Robert_G 18. Aug 2005 10:08

Re: In eigener Klasse properties oder public variablen ??
 
och menno Speedmaster...
Zitat:

Schwachsinn, warum sollte man keine Variable auf public setzen. Warum eine extra property anlegen oder eine Funktion damit du den Wert dieser bekommst.
Dass du der Held bist wissen wir ja, aber das war so ein peinlicher Auftritt...
Eine Property abstahiert Zugriffe.
Delphi-Quellcode:
property X : Y read fX write fX;
Das ist nicht langsamer als
Delphi-Quellcode:
X : Y;
AABER:
Wenn du nur noch lesenden Zugriff erlauben willst: wirf die write clause raus.
Willst du Dirty state management für die Klase betreiben, kannst du Änderungen im Setter abfangen.
Du kannst im Setter auch Voraussetzungen prüfen, und eine Zuweisung eines dummen Wertes in einer dummen Situation abweisen.
Ntürlich alles ohne das öffentliche Interface der Klasse zu verändern (bis auf read write -> read)

Als "Schwachsinn" empfinde ich, dass manche lieber total verkrüppelten Code schreiben, weil sie es für zu aufwenig halten vernünftig zu planen und/oder überhaupt nachzudenken.

btw:
Zitat:

Zitat von Speedmaster
Selbst Microsoft hält sich nicht an diesen "Angeblichen" Grundsatz der OOP, auch nicht in .NET ( Dort gibts mehr Globale Variablen als du an einer Hand aufzählen kannst )!

Dann kannst du sicher auch ein Beispiel nennen, right?

malo 18. Aug 2005 10:14

Re: In eigener Klasse properties oder public variablen ??
 
Zitat:

Zitat von Sanchez
Einfach die Property (z.B. property Irgendwas : EinTyp;) hinschreiben und Strg-Shift-C drücken.

Dann haben Personal-Nutzer aber verloren :roll:

Speedmaster 18. Aug 2005 10:32

Re: In eigener Klasse properties oder public variablen ??
 
Zitat:

Zitat von Robert_G
Zitat:

Zitat von Speedmaster
Selbst Microsoft hält sich nicht an diesen "Angeblichen" Grundsatz der OOP, auch nicht in .NET ( Dort gibts mehr Globale Variablen als du an einer Hand aufzählen kannst )!

Dann kannst du sicher auch ein Beispiel nennen, right?

Selbstverständlich, die ganzen Env. Variablen( z.b. DateTime, oder TickCount ) sind Global( Abgesehen vom Namenspace ). Und hier noch ein kleines Codebeispiel( Was mit Spontan einfiel, und meine nicht das das nicht zählt! ):
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace DeviceTutorial
{
    public class CreateDevice : Form
    {
        // Our global variables for this project
        Device device = null; // Our rendering device

        public CreateDevice()
        {
            // Set the initial size of our form
            this.ClientSize = new System.Drawing.Size(400,300);
            // And its caption
            this.Text = "D3D Tutorial 01: CreateDevice";
        }
        .
        .
        .
    }
    .
    .
    .
}
Ach ja: Das es langsammer ist hat ja niemand gesagt!

mfg

Speedmaster

Robert_G 18. Aug 2005 10:57

Re: In eigener Klasse properties oder public variablen ??
 
Zitat:

Zitat von Speedmaster
Zitat:

Zitat von Robert_G
Dann kannst du sicher auch ein Beispiel nennen, right?

Selbstverständlich, die ganzen Env. Variablen( z.b. DateTime, oder TickCount ) sind Global( Abgesehen vom Namenspace ).

Sehen für mich nach statischen properties aus.
Zum Beispiel Environment.CurrentDirectory würde in einer Hochsprache so aussehen:
Code:
public static string CurrentDirectory
{
  get { return Directory.GetCurrentDirectory(); }
  set { Directory.SetCurrentDirectory(value); }
}
Zitat:

Und hier noch ein kleines Codebeispiel( Was mit Spontan einfiel, und meine nicht das das nicht zählt! ):
Code:
...
public class CreateDevice : Form
{
  ...
  // Our global variables for this project
  Device device = null; // Our rendering device
  ...
}

Wo siehst du da eine globale Variable, oder auch nur ein öffentliches Feld?
Ich sehe nur ein privates Feld... :wall:
Und bevor du dir noch weitere nicht hinterfragte Argumente vorbringst: Überlege dochmal für was für ein sinnloses Unterfangen, du hier plädierst... :roll:

Sanchez 18. Aug 2005 11:16

Re: In eigener Klasse properties oder public variablen ??
 
Zitat:

Zitat von malo
Dann haben Personal-Nutzer aber verloren :roll:

Funktioniert das etwa in Personal-Editionen nicht? :shock:

@Speedmaster: Warum sollte ich auf biegen und brechen unsauberen Code produzieren, der mir Änderungen stark erschwert und ein unkontrolliertes Nutzen eines Objektes zulässt, wenn es mit dem Mehraufwand eines Shortcuttes auch besser geht?

malo 18. Aug 2005 17:59

Re: In eigener Klasse properties oder public variablen ??
 
Zitat:

Zitat von Sanchez
Zitat:

Zitat von malo
Dann haben Personal-Nutzer aber verloren :roll:

Funktioniert das etwa in Personal-Editionen nicht? :shock:

Also, lass mal überlegen...

D7 PE: Strg+Shift+C - Kein Ergebnis
D2005 PE: Strg+Shift+C - Kein Ergebnis

Und um zu überprüfen, ob das vielleicht an der Tastatur oder an irgendwelchen Treibern/Viren etc. liegt, einmal ein Gegenbeispiel.
D5 Pro: Strg+Shift+C - Siehe da! Die Klassen sind vervollständigt :firejump:

Von daher... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz