Co jest publiczne, prywatne i chronione w programowaniu obiektowym?

94

Co jest publiczne, prywatne i chronione w programowaniu obiektowym?

Majaczenie alkoholowe
źródło
+1, jedna z tych rzeczy, które

Odpowiedzi:

153

modyfikatorami dostępu i pomagają nam wdrażać enkapsulację (lub ukrywanie informacji). Informują kompilator, które inne klasy powinny mieć dostęp do definiowanego pola lub metody.

private - Tylko bieżąca klasa będzie miała dostęp do pola lub metody.

protected - Tylko bieżąca klasa i podklasy (a czasami także klasy z tym samym pakietem) tej klasy będą miały dostęp do pola lub metody.

public - Każda klasa może odwoływać się do pola lub wywołać metodę.

Zakłada się, że te słowa kluczowe są używane jako część deklaracji pola lub metody w definicji klasy.

Ben S.
źródło
4
zauważ, że w Javie członkowie tego samego pakietu mogą uzyskać dostęp do chronionych członków
Landon Kuhn
2
Tak, a Java ma również czwarty modyfikator dostępu, którym jest pusty ciąg. Brak modyfikatora dostępu umożliwi dostęp z dowolnej klasy na poziomie pakietu.
Ben S,
1
Podoba mi się część „kompilator”, ponieważ do większości języków, które znam, wszystkie funkcje / klasy są łatwo dostępne w czasie wykonywania, na przykład poprzez odbicia w .NET. Dlatego mam tendencję do mówienia, że ​​te modyfikatory dostępu są w zasadzie tylko pomocą dla programistów, aby pokierowali innymi programistami pracującymi z tym samym kodem, ukrywając pewne rzeczy.
merkuro
1
Niektóre języki mają pewne cechy szczególne. Podobnie jak w Delphi, członkowie prywatni są dostępni dla innych klas w tej samej jednostce i jeśli nie chcesz tego zachowania, musisz używać ścisłego prywatnego.
Fabio Gomes
1
C # wykonuje również sztuczkę z chronionymi członkami tego samego pakietu. W istocie C # to po prostu Java Microsoftu
iGbanam
7

Wszystkie trzy są modyfikatorami dostępu i słowami kluczowymi używanymi w klasie. Wszystko, co zadeklarowano jako publiczne, może być użyte przez dowolny obiekt w klasie lub poza klasą, zmienne prywatne mogą być używane tylko przez obiekty w klasie i nie mogą być zmieniane przez bezpośredni dostęp (ponieważ można to zmienić za pomocą funkcji takich jak funkcja zaprzyjaźniona) .Wszystko zdefiniowane w sekcji protected może być używane przez klasę i klasę pochodną.

monica
źródło
6

W rzeczywistości nie są to pojęcia, ale raczej konkretne słowa kluczowe, które zwykle występują (z nieco inną semantyką) w popularnych językach, takich jak C ++ i Java.

Zasadniczo mają one umożliwić klasie ograniczenie dostępu do elementów członkowskich (pól lub funkcji). Chodzi o to, że im mniej jeden typ ma dostęp do innego typu, tym mniej zależności można utworzyć. Pozwala to na łatwiejszą zmianę obiektu, do którego uzyskano dostęp, bez wpływu na obiekty, które się do niego odnoszą.

Ogólnie rzecz biorąc, publiczny oznacza, że ​​każdy ma dostęp, prywatny oznacza, że ​​dostęp mają tylko członkowie tej samej klasy, a chroniony oznacza, że ​​członkowie podklas są również dozwoleni. Jednak każdy język dodaje do tego swoje własne elementy. Na przykład C ++ umożliwia dziedziczenie niepubliczne. W Javie istnieje również domyślny poziom dostępu (pakiet), istnieją reguły dotyczące klas wewnętrznych itp.

Uri
źródło
2

Element publiczny to taki, do którego można uzyskać dostęp z dowolnej innej klasy. Musisz tylko wiedzieć, jaki to jest obiekt i możesz użyć operatora kropki, aby uzyskać do niego dostęp. Chronione oznacza, że ​​klasa i jej podklasy mają dostęp do zmiennej, ale nie do żadnych innych klas, muszą użyć metody pobierającej / ustawiającej, aby cokolwiek zrobić ze zmienną. Prywatny oznacza, że ​​tylko ta klasa ma bezpośredni dostęp do zmiennej, wszystko inne wymaga metody / funkcji, aby uzyskać dostęp do tych danych lub je zmienić. Mam nadzieję że to pomoże.

mnuzzo
źródło
1

jak wyżej, ale jakościowo:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

im mniej dostępu zapewniasz, tym mniej szczegółów implementacji wycieka z twoich obiektów. mniej tego rodzaju wycieków oznacza większą elastyczność (inaczej „luźniejsze sprzężenie”) w zakresie zmiany sposobu implementacji obiektu bez przerywania pracy klientów obiektu. to naprawdę podstawowa rzecz do zrozumienia.

Jon
źródło
0

Podsumowując, w programowaniu obiektowym wszystko jest modelowane na klasy i obiekty. Klasy zawierają właściwości i metody. Publiczne, prywatne i chronione słowa kluczowe służą do określania dostępu do tych elementów członkowskich (właściwości i metod) klasy z innych klas lub innych plików .dll, a nawet innych aplikacji.

Zaki
źródło