Czy należy używać pod dowolnymi warunkami podmiotów ustawiających klasy w klasie?Korzystanie z programu ustawiającego-gettera w klasie
Odpowiedz
Setery ściągaczy są zazwyczaj używane z zewnątrz, bezpośrednio z poziomu pól. Główna zaleta/cel to enkapsulacja setera gettera,
Jeśli twoje setery pobierające mają jakiś kod logiczny, użyj go.
na przykład:
public void setValue(int val){
if(val > 100)
this.val = 0;
else
this.val = val;
}
zobaczyć również
Tak, pobierające i ustawiające są użyteczne. Ponieważ PHP nie obsługuje podpowiedzi typów dla prostych typów, takich jak int lub string, nie można wymusić wartości odpowiedniego typu.
Używając setera, zawsze masz możliwość sprawdzenia ustawionej wartości. Jeśli wartość ustawiona na właściwość int nie jest int, możesz wybrać jej typowanie lub podnieść błąd, zamiast po prostu przyjąć niewłaściwą wartość.
To znacznie ułatwi debugowanie i konserwację aplikacji. Dobrym pomysłem jest więc używanie programów pobierających i ustawiających, nawet jeśli nie zawierają one dużo logiki poza tymi sprawdzeniami.
+ 1. To jest przydatne, dziękuję i org.life ma rację.Nie dodałem jeszcze tagu specyficznego dla języka. –
Powinieneś używać zdobywców i setera prawie wszędzie, także w klasie. Jeśli tego nie zrobisz, to potencjalnie przełamujesz enkapsulację, a co gorsza, możesz unieważnić swoje niezmienniki.
Jako prosty przykład w C++:
class BankAccount
{
public:
void withdraw(int amount)
{
m_balance -= amount;
m_withdrawals++;
}
void transfer(BankAcount& other, int amount)
{
m_balance -= amount;
other.m_balance += amount;
}
private:
int m_balance;
int m_withdrawals;
};
zobaczyć błąd? transfer
wypłaca pieniądze, ale nie zwiększa się o m_withdrawals
. Można było tego uniknąć, gdyby po prostu zadzwonił pod numer withdraw
zamiast ręcznie zmniejszać saldo.
To samo dotyczy programów pobierających i ustawiających. Na przykład, dość często spotykamy się z tymi, które leniwie inicjują swoje wartości. Jeśli inna funkcja członkowska próbuje bezpośrednio uzyskać dostęp do niezainicjowanego członka, wówczas otrzymasz zerowy wskaźnik wskaźnika.
Zasadniczo zawsze powinieneś próbować używać modułów pobierających i ustawiających, ilekroć zapewniają one pożądaną funkcjonalność. Im więcej rzeczy zrobisz na niskim poziomie, tym więcej błędów na niskim poziomie będziesz mieć. Nie ma sensu pisać osób pobierających i ustawiających, jeśli nie zamierzasz ich używać.
Myślę, że opisałeś przykład nie dla obiektów pobierających/ustawiających, ale raczej enkapsulacji –
Getters i setery * to * enkapsulacja - to ich cały cel. –
"Przeciągacze i setery są enkapsulacją" nie :) obiekty pobierające i setery przerywają enkapsulację. Enkapsulacja == obiekt nie przekazuje danych (właściwości) na zewnątrz. – smentek
@GolezTrol
Nie ma znaczek na temat PHP i nie masz racji. To, co opisujesz, nie ma nic wspólnego z ustawiaczami. Możesz wymusić wpisanie parametru (w PHP) za pomocą dowolnej metody nie tylko ustawiającej.
Można napisać:
setX(X $x){ ...}
setY(Y $y){ ...}
lub po prostu:
iAmMethodNotASetter(X $x, Y $y){
//20lines of code here end then:
$this->x = $x;
$this->y = $y;
}
jak widać nie muszę ustawiające wymusić typ właściwości obiektów.
A błąd rzucania w setera po sprawdzeniu typu zmiennej i tak jest zły. Jest to typowy błąd programistów, którzy przeszli z języka statycznie wpisanego na dynamiczny język.
Setery i zdobycze są KONWENCJONALNE i niczego nie egzekwują! Dziś zwykle używamy ich do tworzenia prostych starych obiektów Java. (POJO - w php word POPO) Jest to po prostu konwekcja (standard) do tworzenia obiektów, które mogą być używane między bibliotekami lub projektami.
Możesz łączyć seterów ze sprawdzaniem typu lub cokolwiek, ale nie sprawi, że będą one czymś więcej niż są.
O Encapsulation:
@ org.life.java - Jigar Joshi
"Główną zaletą/celem jest hermetyzacja ustawiaczy getter"
@Peter Aleksandra
"Powinieneś używać geterów i seter prawie wszędzie, w tym wewnątrz "klasy. Jeśli nie, to jesteś potencjalnie łamanie hermetyzacji”«pobierające i ustawiające są hermetyzacja»
Źle, źle, źle. Encapsulation nie ma nic wspólnego z pobierające i ustawiające i to jest bardzo częstym błędem, wiem, że wiele artykułów powtarzało to cały czas do góry nogami ...
Osoby pobierające i ustawiające nie pomagają hermetyzacji nawet gorzej, mogą przerwać hermetyzację. Robią tak, gdy używasz ich dane z obiektu zamiast proszenia obiektu o zrobienie czegoś dla ciebie z własnymi danymi.
Enkapsulacja == obiekt bierze pełną odpowiedzialność za swoje dane i nie podaje danych wiersza. A korzystanie z własności prywatnej nie jest czymś więcej, niż tylko publiczne upublicznianie tej własności == hamowanie enkapsulacji.
Chceck ustęp enkapsulacji: http://en.wikipedia.org/wiki/C%2B%2B lub http://en.wikipedia.org/wiki/Encapsulation_%28computer_science%29 Nawet jedno słowo o ustawiające lub pobierające ...
Z wiki: "[Encapsulation is] Konstrukt językowy, który ułatwia wiązanie danych z metodami (lub innymi funkcjami) operującymi na tych danych." Programy pobierające i ustawiające to metody, które są dołączane do klasy i operują na jej danych. W każdym razie, dałem ci -1, ponieważ nie odpowiedziałeś na to pytanie i wysłałeś je tylko po to, by nękać innych. Użyj komentarzy do tego. –
Możesz mi podać, co chcesz, po prostu proszę przeczytać książkę ... – smentek
+ 1. Chociaż jesteś nieco spięty, przedstawiasz interesujący punkt widzenia. Muszę trochę więcej przeczytać na ten temat.dziękuję –
- 1. Korzystanie nowy z Scala końcowej klasie przypadku
- 2. Czy korzystanie z właściwości w starej klasie python powoduje problemy?
- 3. Czy korzystanie z html w klasie php jest złe?
- 4. Czy korzystanie z programu Lodash w projekcie AngularJS przynosi korzyści?
- 5. Korzystanie z „start” polecenia z parametrów przekazywanych do uruchomionego programu
- 6. Korzystanie rodzajowy interfejs kilka razy w tej samej klasie
- 7. Korzystanie z programu yii2 jest z normalnym tablicy danych
- 8. Korzystanie z programu Regionerate na serwerze VS2012 lub alternatywnym dodatku
- 9. Korzystanie z programu Universal Image Loader do lokalnego ładowania zasobów
- 10. Korzystanie z LinkedBlockingQueue wystarczająco dobre dla programu wielojęzykowego java?
- 11. Korzystanie z programu Bootstrap, pole ostrzeżenia zapamiętaj zamknij działanie
- 12. Korzystanie z programu PsGet za pośrednictwem serwera proxy
- 13. Korzystanie z funkcji Weryfikuj w celu potwierdzenia oczekiwanych wartości parametrów w klasie próbkowania Moq
- 14. Korzystanie z haczyków Malloc
- 15. Korzystanie z ObjectDisposedException
- 16. Korzystanie z metody dispatch_once w swizzlingu
- 17. Korzystanie z "||" w instrukcjach przełączania w java
- 18. Korzystanie z GeoTools: Co to jest szerokość i długość geograficzna w klasie com.vividsolutions.jts.geom.Coordinate?
- 19. Korzystanie z metod statycznych lub bez metod statycznych w klasie Dao?
- 20. Korzystanie z threading.Thread.join()
- 21. Korzystanie z Backspace z ncurses
- 22. Zobacz pomocnika link_to w klasie modelu
- 23. Korzystanie z PropertyInfo.GetValue()
- 24. Korzystanie z WebBrowser w aplikacji konsolowej
- 25. Korzystanie z this.sendAction() w komponentach?
- 26. Korzystanie z OrderedDict w ** kwargs
- 27. Korzystanie z DATEADD w sqlalchemy
- 28. Korzystanie z indexOf w Jade
- 29. Korzystanie z jQuery w ASP.NET
- 30. Korzystanie z TemplateBinding w ControlTemplate.Triggers
link do innego artykułu wyjaśnia to bardzo dobrze. – Knubo
Podpowiedź typu int nie działa w PHP. – GolezTrol
@Geolez Nie widzę tagu PHP według OP, jego koncepcja opisanego tutaj OOP nie jest specyficzna dla żadnego języka –