@MurrayRothbard Po prostu świat poszedł w stronę hermetyzacji. W przypadku małych programików nie ma to znaczenia ale jeśli buduje się coś większego to daje to ogromne plusy. W skrócie program nie powinien wiedzieć co się dzieje w środku klasy. To ma plusy, bo jeśli chcemy przetestować fragment kodu to piszemy testy dla konkretnej klasy (bo możemy tak zrobić). Dzięki separowaniu kodu jest to dużo prostsze i zajmuje mniej czasu, a same testy wykonują się szybciej.
- Nie jestem pythonowcem i ten przykład z sort jest dla mnie niezrozumiały. W PHP (a dokładniej we frameworku laravel (wiem nie jest to idealny przykład do teoryzowania)) mamy fajną klasę "Collection". Jest dokładnie tym jak się nazywa. Mozemy sobie tworzyć kilka obiektów i wrzucić je do kolekcji. Poniżej pseudokod:
Collection kolekcja = new Collection();
kolekcja.push(new mojObiekt(3));
kolekcja.push(new moj Obiekt(1));
kolekcja.push new mojObiekt(2));
i potem gdy chcemy posortować te elementy to po prostu sortujemy kolekcję tj. kolejność obiektów. Same obiekty się nie zmieniają. Jest separacja między klasą sortującą, a obiektami. I tak to powinno wyglądać.
- Jeśli chodzi o składnie
2.add(2)
to ma to jak najbardziej sens. Jeżeli mamy obiekt to jego stan nie powinien być zmieniany przez coś z zewnątrz. Powinna być do tego funkcja pośrednicząca. Dzięki temu nic nie zmieni nam stanu obiektu "przez przypadek" oraz jeśli będziemy chcieli zmienić w przyszłości sposób zmiany tej wartości to zrobimy to w jednym miejsu, a nie 100. Przyczepiłbym się do nazwy tej zmiennej, bo "2" opisuje konkretny stan, a nie to czym dany obiekt jest, powinno być:
liczba.add(2)
- Jeśli chodzi o składnie obiekt.cos().cosInnego().itd() to jest to skrót dla:
obiekt = obiekt.cos();
obiekt = obiekt.cosInnego();
obiekt = obiekt.itd();
ponieważ każda z tych metod cos(), cosInnego, itd() na końcu ma coś w stylu "return this", co zwraca zmodyfikowany obiekt. I jak widzisz operacje tutaj czytamy od lewej do prawej więc zapis skrótowy też powinien być czytany w ten sam sposób. Oczywiście to tylko skrót, kwestia składni. Równie dobrze można korzystać z wersji dłuższej, ale więcej kodu to więcej czasu poświęconego aby go wpisać.