Python Szukam przykładowego programu zoorientowanego obiektowo

0

Nauczyłem się właśnie obiektowości znam klasy, obiekty, metody, argumenty, dekoratory, dziedziczenie, hermetyzacje i tak dalej ale nie wiem jak to zastosować w praktyce pisząc program. Szukam jakiegoś typowego programu najlepiej bez modułów takich jak sys czy bibliotek takich jak pygame.

0
Archiwista napisał(a):

Nauczyłem się właśnie obiektowości

Wolnego, wolnego :) "nauczyłem się właśnie" oznacza dla Ciebie "właśnie przeczytałem o tym w kursie", "ukończyłem swój pierwszy projekt" czy "mój kod przeszedł od strzała code review w pracy"? Jest weekend, więc obstawiam, że raczej nie to ostatnie ;) Nie mówiąc o tym, że nauczenie się obiektowości - przynajmniej dla mnie - oznacza także wyczucie, kiedy jest sens jej użyć, a kiedy wpychanie swojego kodu w OOP nie tylko nie przyniosłoby korzyści, ale wręcz robione byłoby na siłę i wbrew wszelkiej intuicji. To, że wszystkie te Javy, C#, Pythony i inne są obiektowe / wspierają obiektowość nie oznacza, że trzeba jej używać za wszelką cenę.

W sumie to sam pewnie nauczę się tego dopiero za parę lat, choć nie cierpię na jakąś OOP-manię. Może nawet piszę trochę za mało obiektowo...

znam klasy, obiekty, metody, argumenty, dekoratory, dziedziczenie, hermetyzacje i tak dalej ale nie wiem jak to zastosować w praktyce pisząc program.

Weź jakieś swoje stare, nie-obiektowe kody, przyjrzyj się i spróbuj je poulepszać, wprowadzając do nich obiektowość - ale nic na siłę.

  • masz jakiś zestaw danych, których używasz głównie w obrębie paru funkcji, przerzucasz je z jednej do drugiej, i generalnie są bardzo ściśle ze sobą powiązane, a stan (dane) ciskasz gdzieś po kątach? pewnie wygodniej byłoby to przepisać na jedną lub więcej klas
  • masz już klasę? super. teraz jeszcze musisz jej użyć. Czyli tworzysz obiekt danej klasy i go używasz (zamiast żonglować gołymi danymi między jakimiś funkcjami). Już wiesz, po co są obiekty :)
  • Wywoływałeś tu funkcję i przekazywałeś jej milion parametrów albo jakiegoś porypanego dict-a? No, to teraz wywołujesz metodę na obiekcie i co najwyżej podajesz jej jakiś inny obiekt jako parametr. Dobra metoda, wie na czym została wywołana i nie trzeba aż tyle żonglować, bo jest self ^^
  • masz jakieś funkcje i/lub metody, które chciałbyś opakować w jakieś dodatkowe zachowanie np. zapisywanie w logach kto i co wywołał nie zmieniając kodu? Super, dekorator się pewnie sprawdzi :)
  • O, ta klasa jest w sumie bardzo podobna do tej drugiej. W sumie to różnią się jednym polem i trochę różnie zaimplementowaną metodą. A może by tak wydzielić część wspólną i podziedziczyć po niej?? Byłoby mniej kodu do utrzymania...
  • Nie, nie, nie, wiem, że byłoby Ci na rękę wsadzić łapy w te dwa pola i wywołać tamtą metodę, ale naprawdę wolałbym, żebyś tego nie robił. Nie, to nie będzie bezpieczne. Ja wiem, myślisz, że nie skopiesz, ale naprawdę nie należy tak tego robić. W ogóle nawet ich nie potrzebujesz, tam masz metody przeznaczone do publicznego użytku. Zresztą, co się będę denerwował, te metody i pola są prywatne. Nie ruszysz ich, bo hermetyzacja i koniec.*

* właściwie to tak naprawdę w Pythonie nic nie jest tak do końca prywatne/chronione, ale są przyjęte konwencje nazywania pól i metod tak, by wiadomo było, co jest publiczne, a co prywatne/chronione.

Szukam jakiegoś typowego programu najlepiej bez modułów takich jak sys czy bibliotek takich jak pygame.

Ciężko będzie znaleźć jakikolwiek program, który robi cokolwiek i nie używa żadnych zewnętrznych modułów, a tym bardziej nie używa biblioteki standardowej. Lepiej już w pierwszej kolejności naucz się korzystania z biblioteki standardowej i jakichś zewnętrznych modułów, oraz menedżera pakietów dla Pythona np. pip, conda - bez OOP można sobie w Pythonie całkiem dobrze radzić, nawet jeżeli używasz modułów napisanych obiektowo. Napisać coś sensownego znając OOP ale nie biblioteki w zasadzie się nie da.

1 użytkowników online, w tym zalogowanych: 0, gości: 1