sobota, lipca 31, 2010

Paradoks Java'y - domyślny poziom widoczności jest stosowany najrzadziej ;-)

Nie mam twardych danych, ale już trochę kodu w Java'ie widziałem i ciekawa sprawa, najrzadziej używanym zakresem widoczności stosowanym w kodzie Java'owym wydaje się być default :-)
Najpowszechniej używane są public i private, z czego większość metod jest zwykle public, a większość pól w klasach jest private. Bardziej wysublimowani programiści używają jeszcze protected, ale default wydaje się być stosowane najrzadziej ;-)

To chyba świadczy o tym, że idea by przy pomocy pakietów i widoczności budować API jest zbyt mało oczywista.

Ok, jednak podam trochę liczb bo w tzw. międzyczasie zajrzałem do Google Code Search i "pomierzyłem" trochę ;-) i okazuje się, że wygląda to tak [hostowanie w Google Docs, eksport z OpenOffice.org przy pomocy OOo2GD]:


Czyli byłem bliski w moich przewidywaniach, okazuje się, że default jest używany jako modyfikator dostępu tylko dla 11.5% metod ze zwracanym wynikiem jako void, int, String czy boolean, rzadziej używany jest tylko protected, bo w 7.6% przypadków :-).
Blisko 70% wszystkich metod w Java'ie jest publiczna i dostępna dla wszystkich, a 75% kodu dostępne jest poza pakietem pochodzenia.

Nie świadczy to o nas programistach za dobrze ;-)

Twórcy języka tworząc defaulta dali nam sygnał, że jest to najbardziej pożądany poziom widoczności, a my to olewamy ;-)

W klasach wygląda to ciut lepiej, bo aż 18.7% klas ma dostęp domyślny, 77.18% jest publicznych, 3.66% jest prywatna i tylko niecałe 0.5% klas jest protected [czyli są to też klasy wewnętrzne bo tylko one mogą mieć widoczność protected].

Cała ta enkapsulacja, ukrywanie implementacji i podobne są chyba zbyt trudne do stosowania w normalnym życiu ;-)

A, i to może być dyskusyjne, wydaje mi się, że kod, który można przeglądać w Google Code Search jest kodem pisanym przez statystycznie lepszych programistów niż normalny kod produkcyjny.

Potwierdza się moje twierdzenie, że jako programiści niedouczeni jesteśmy ;-)

W ramach sprzedaży metodologii "badania", np. tak szukamy klas protected, a tak metod publicznych zwracających String.


Podobne postybeta
Klasa statyczna - ki diabeł?;-)
protected - powinni tego zakazać...
Przeszacowany Linux, Niedoszacowany Windows i Ukryty MacOS ;-) czyli o tym na jakich systemach używa się głównie OOo2GD
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
Code smellsy ;-) protected i abstract