Pierwsza rzecz to właściwości czyli takie "wygodniejsze" wg. twórców C# podejście do hermetyzacji.
Chcąc dostać się do wartości pola obiektu, tudzież w bardziej abstrakcyjnym ujęciu odczytać lub zmienić część stanu obiektu możemy:
- odczytać wartość pola
- użyć metody dostępowej
- użyć właściwości
Dla mnie właściwości to taki "ni pies, ni wydra".
Nie jest to łamiący hermetyzacje dostęp do pól przez bezpośredni ich zapis i odczyt, ale nie jest to również jawne użycie metod dostępowych.
Czytając kod używający właściwości nie wiem czy używana jest bezpośrednio wartość pola czy jednak, gdzieś z tyłu wołana jest jakaś metoda. Może to prowadzić do dość "pociesznych" sytuacji gdzie przestawienie dwóch "niezależnych" dostępów do obiektu będzie powodować zmiany działania programu.
Drugą rzeczą, która mi przeszkadza w C# [w Delphi też ;-)] to fakt, że metody nie są domyślnie wirtualne.
Zastanawiałem się nad tym i szczerze nie widze powodu istnienia metod nie wirtualnych ;-)
Gdy mam klasę Ryba z metodą jedz() i dziedziczącą z niej klasę Błazenek z metodą jedz(), oczekuje że jeżeli stworzę obiekt Nemo na podstawie klasy Błazenek to niezależnie czy będę się do niej odwoływał przez kontekst Ryby czy Błazenka to zawsze zawołam metodę jedz() z Błazenka.... i tak jest w Java'ie gdzie wszystkie metody są wirtualne.
Sensu w tym nie widzę.... ;-)
Okazuje się, że dopadł mnie "językizm" ;-)
Językizm przez analogię z rasizmem i gatunkizmem, czyli uprzedzenia do innych języków programowania.
PS: zainstalowałem dziś serwer CVSNT, na razie jednak coś źle go skonfigurowałem ;-)
PS2: zastanawiam się czy tego bloga można już pokazać "światu" ;-)
Podobne postybeta
Na przekór
Weekend
Coca-Cola Zero i pomidory = najbardziej "odchudzająca dieta" na świecie ;-)
The Greatest Show on Earth: The Evidence for Evolution
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
Brak komentarzy:
Prześlij komentarz