poniedziałek, kwietnia 17, 2006

"Językizm" czyli co mnie razi w C#

Czytałem dziś o C# i znów zacząłem mieć pewne wątpliwości co do tego języka. Dwie rzeczy mnie bardzo zraziły.
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
Ta ostatnia "przypadłość" istnieje w C# i Delphi, nie ma jej zaś w Java'ie.
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
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
The Greatest Show on Earth: The Evidence for Evolution
C# - Java = Delphi