Zasadniczo próbuję opisywać programowanie obiektowe na podstawie przykładów z prawdziwego świata.
Na przykład, mogę powiedzieć, że klasa o nazwie Vehicle
opisuje minimalne rzeczy, którymi jest pojazd. Poproszę osobę, aby powiedziała mi, co on lub ona uważa za pojazd. Czasami mówią takie rzeczy jak „Cóż, jak samochód lub ciężarówka”, a ja kiwam głową i się z nimi zgadzam. Potem zapytam, jakie są różnice między samochodem a ciężarówką. Czasami wspominają o rozmiarze, czasem o celu i innych rzeczach.
Następnie poproszę ich, aby zapomnieli o samochodzie lub ciężarówce i po prostu poproszę, aby kontynuowali opisywanie pojazdu:
„Och, dobrze się porusza”
„Ma operatora lub kierowcę”
itp...
Wkrótce wiemy, co to jest Pojazd, i powiedziałem, że w OOP zdefiniujemy pojazd, a dla argumentu stwierdzimy, że może się poruszać i dać swego rodzaju kierowcę. Więc zapytam, ok, więc co ma samochód?
„Drzwi”
„Windows”
A potem ciężarówka ....
„Drzwi” „okna” „Więcej kół!”
Wkrótce po wielu dyskusjach druga osoba ogólnie zidentyfikowała:
1) Co stanowi pojazd
2) Co stanowi samochód
3) Co stanowi ciężarówkę
4) Co stanowi samolot.
Wszystko bez żadnych szczegółów technicznych. Podzieliliśmy właściwości każdego z nich na odpowiednie obszary. Rozumieją dziedziczenie („Tak, samochód jest pojazdem, ciężarówka jest pojazdem, ale samochód nie jest ciężarówką, jest PROSTY, duh!”).
Rozumieją nawet polimorfizm: „Jasne, w zasadzie robią to samo, ale może to nieco inaczej”. Możemy mówić o zachowaniu i miejscu, w którym powinno ono mieszkać w naszym drzewie obiektów.
W zależności od wykształcenia i pochodzenia niektórzy zdobywają go szybciej niż inni. Ale gdy porównuję OOP do rzeczywistych obiektów, większość ludzi zawsze je otrzymuje. W rozmowach z osobami nietechnicznymi odnalazłem rzeczy, o których nigdy nie myślałem. Pojazdy nie muszą być na przykład obsadzone (drony), ale czy programista pomyślałby o operatorze pojazdu jako o jego własności? Nie twierdzę, że wymienienie operatora jest dobre lub złe, ale powoduje, że myślimy o tym, co modelujemy i co staramy się osiągnąć, opracowując oprogramowanie.
Teraz częściowa specjalizacja szablonów, z drugiej strony .... :)