Recimo da imaš program (igricu) za simuliranje vožnje automobilom.
Znači imaš komande za start, ubrzavanje, skretanje, kočenje, zaustavljanje itd.
Naravno da ćeš za svaku pojedinu komandu napisati funkciju i pozivati je kad ti treba, odnosno pritisneš odgovarajaću tipku - jer trebati će često.
Kad sve te funkcije grupiraš u jedan "potprogram" oda se to zove klasa a te funkcije u klasi se onda zovu metode.
Kad pozivaš te metode prvo kreiraš objekt u memoriji. Objekti mogu međusobno komunicirati odnosno proslijeđivati podatke jedni drugima i nije ih briga za "unutrašnjost" drugog objekta.
Znači imaš klasu za upravljanje automobilom. Onda imaš neki drugi automobil koji isto koristi te metode ali recimo ima drukčije ubrzanje. Onda možeš proširiti tu klasu novom metodom za ubrzanje i koristiti to ubrzanje ali ostale metode ostaju iste.
U tome je poanta. Uglavnom za objekto programiranje potrebno je prvo naučiti teoriju - klase, nasljeđivanje, polimorfizam, apstrakcija, javne, privatne i statičke metode i varijable itd. pa tek onda se može početi tako programirati.
Mana- malo sporije izvršavanje takvog koda.
Prednosti - puno ih je - lako održavanje koda, preglednost, modularnost itd.
Nakon toga ide "design patterns". Opis kako se na najbolji način riješava neki problem u programiranju. Preuzeto iz arhitekture.