2016-09-28 1 views
-2

Es gibt "öffentlich", "privat" und "geschützt" in OOP wie C++ Sprache. Und ich habe zwei Arten von einfachen Programmen ausprobiert.Warum wird 'privat' in objektorientiertem Programm verwendet?

Unten ist der erste Fall in C++.

class A { 

public: 
    string name; 

} 

int main(void) { 

    A a; 
    a.name; 

} 

Und zweitens Fall ...

class A { 

protected: 
    string name; 

public: 
    string getName(void) { 
     return name; 
    } 

} 

int main(void) { 

    A a; 
    //a.name; //can't access 
    cout << a.getName(); 

} 

Welche ist besser in zwei Fällen?

Da die Informationen versteckt werden müssen, ist der zweite vielleicht besser, denke ich. Aber im zweiten Fall kann er auch auf die Variable 'name' zugreifen, indem er die Funktion getName() verwendet. Wenn ja, obwohl der erste einfacher ist als der zweite, warum sollte ich den zweiten verwenden? Mit anderen Worten, warum wird protected verwendet?

+0

„Da die Informationen versteckt werden muss, der zweite ist vielleicht besser“ - wenn Informationen versteckt das Ziel ist, die zweite das ist * nur * eine, die sich auch nur im Entferntesten qualifiziert, so dass sie standardmäßig "besser" gewinnt. – WhozCraig

Antwort

0

Verkapselung.

Im ersten Beispiel kann jeder Name beliebig verwenden. In diesem trivialen Beispiel können sie nicht viel schaden, aber was, wenn name "Fred" ist und die Änderung in "Barney" das Programm zum Absturz bringt?

A.name = "Barney"; 

Programm stürzt ab. Im zweiten Beispiel ist name nicht zugänglich. getName gibt eine Kopie von name zurück. Der Empfänger kann ohne Beschädigung der inneren Zustand A, auf diese Kopie, was sie wollen tun so

string temp = A.getName(); 
temp = "Barney"; 

absolut nichts.

Betrachten Sie dies als Selbstverteidigung für Objekte. Jedes Objekt hat nun Kontrolle darüber, wie sein interner Zustand verändert wird und kann sich vor versehentlicher Fehlbedienung und Beschädigung schützen. Die Benutzer von A müssen nicht einmal wissen, wie sie von getName gespeichert werden. Alles was sie wissen ist, dass sie eine string bekommen. Dies entkoppelt A von seinen Benutzern.

0

Zweitens ist eine bessere Klasse, wir sind die Daten eng an Klasse kapseln und ermöglicht auch den Umfang der Vererbung mit geschützten. Der Mitgliedsname kann nur durch Mitgliedsfunktionen der Klasse geändert werden.

In der ersten Klasse, indem Mitglieder als öffentlich gemacht werden, erlauben wir externen Funktionen vom Programm die Daten zu manipulieren, was eigentlich keine gute Programmierpraxis ist.

0

Zugriffsmodifikator

Geschützte

Der Zugriff geschützt Modifikator ist innerhalb Paket und außerhalb des Pakets, sondern durch Vererbung nur.

Privat Zugriffsmodifikator

Der private Zugriffsmodifikator zugänglich ist nur innerhalb der Klasse. Private wird grundsätzlich für Abstraktion verwendet.

Beispiel

package pack; 
public class A{ 
protected void msg(){System.out.println("Hello");} 
} 
//save by B.java 
package mypack; 
import pack.*; 

class B extends A{ 
    public static void main(String args[]){ 
    B obj = new B(); 
    A obj = new B();//compile time error 
    obj.msg(); 
    } 
} 
Output:Hello 

privat ist strenger als geschützt

Verwandte Themen