Public/private beinträchtigt nicht die Sicherheit?

Hallo.

Public und Private hat nichts mit der Sicherheit zutun bzw. wenn man alle Variablen Private hat und nur durch spezielle Getter und Setter arbeitet, ist ein Programm nicht sicherer? Das ganze dient einfach zur Übersicht für die Programmierer…also kann man im Grunde eigentlich immer public nehmen oder?

Gruß

Hallo!

Wenn du nie Fehler machst beim Programmieren, ist es tatsächlich egal. Zur Laufzeit interessiert public/private nicht mehr. Aber wenn du versehentlich eine als private gedachte Membervariable, deren Wert in der Klasse berechnet wird (z.B. beim Setter-Aufruf für eine andere Variable), von außen änderst, führt das zu widersprüchlichen Daten innerhalb der Klasse und es knallt unter Umständen.

Jan

Hallo,

Public und Private hat nichts mit der Sicherheit zutun bzw.
wenn man alle Variablen Private hat und nur durch spezielle
Getter und Setter arbeitet, ist ein Programm nicht sicherer?

Es gibt mehrere Arten von Sicherheit, hier relevant:

  1. Ein Feature kann es dem Programmierer leichter machen, gewisse Fehler zu vermeiden, ihm also Sicherheit geben. Das ist bei „private“-Attribute und Methoden der Fall: sie machen es quasi unmoeglich, Features zu benutzen, von denen der Autor der Bibliothek abraet

  2. Ein Feature kann Schutz gegen boeswillige Angriffe bieten. „private“ bietet diese Art von Sicherheit nicht. (Zumindest nicht in C++ und Java)

Gruesse,
Moritz

Hallo!

Grundsätzlich sollten alle Properties (Variablen, Eigenschaften) eines Objektes privat sein. Der Zugriff auf diese von aussen sollte immer über öffentliche Methoden (z.B. getter/setter) erfolgen. Nur so hast du als Entwickler einer Klasse die volle Kontrolle über deine Properties und kannst z.B. ungültige Werte ablehnen. Ausserdem wird so die interne Struktur vor dem externen Nutzer verborgen und ermöglicht so z.B. Umstellungen, Anpassungen, Verbesserungen an der internen Struktur ohne dass sich das öffentlich sichtbare für den Nutzer dieses Objektes ändert.

Wenn ein Objekt eine öffentliche Methode hat, die beispielweise eine komplizierte Berechnung zu erledigen hat, kann diese Methode schon ziemlich gross und unübersichtlich werden. Dann können einzelne Schritte einer Berechnung in private Methoden ausgelagert werden, was die interne Wiederverwendbarkeit, die Übersichtlichkeit und damit auch die Wartbarkeit massiv erhöht.

Die Unterscheidung zwischen privaten und öffentlichen Properties und Methoden ist kein Feature, um die Sicherheit zu erhöhen, sondern die das Interface eines Objektes zu definieren.

Gruss
McPringle