Ciljevi OOP dizajna
Kada dizajniramo kompleksnu aplikaciju, pre nego što uopšte počnemo sa programiranjem, moramo imati u vidu ciljeve dobrog dizajna kako bismo postavili ispravne temelje. Softverski inžinjering ima za cilj produkciju kvalitetnog softvera. Taj kvalitet, naravno, ne može da se definiše jednom rečenicom, već zavisi od većeg broja faktora.
Softver pre svega, treba da bude ispravan - odnosno da na ispravan način obavlja zadatak koji se traži, tj. ono što je navedeno u specifikaciji. Drugo pitanje je koliko je softver robustan. To u stvari znači da aplikacija ume da se "nosi" sa neočekivanim ulaznim podacima. Drugim rečima, to je odgovor na pitanje, kako program reaguje kada korisnik uradi nešto što nije predviđeno ili kada se u okruženju (operativni sistem, Internet konekcija, hardver...) dogodi nešto što nije trebalo.
Šta se dešava u situacijama kada se inicijalna specifikacija programa promeni? Dobar softver je proširiv - ovo označava fleksibilnost i mogućnost dodavanja novih mogućnosti bez potrebe da se (previše) menjaju već napravljeni delovi programa. Očigledno je da programeri ne vole previše da rade. Osim što žele da dodaju nove mogućnosti bez menjanja postojećeg programa, bilo bi jako poželjno da ono što je do sada napravljeno može ponovo da se koristi za neki drugi projekat. Da bi se to ostvarilo, poželjno je da softverske komponente budu međusobno kompatibilne, što znači da se poštuju određeni standardi komunikacije delova programa.
Sa programerske strane, jedna od najstarijih zahteva u programiranju je efikasnost, odnosno sposobnost softvera da izvrši zadatak uz što manje zahteve prema hardverskim resursima. Ovo bi značilo da je uvek bolji program koji manje opterećuje procesor, manje zauzima memoriju, zahteva manji prenos podataka preko mreže i sl.
Portabilnost je programerska muka, još od vremena kada se na tržištu pojavio računar konkurentskog proizvođača. Generalna ideja je da se jednom napravljen program uz što manje intervencija može prilagoditi drugom sistemu. Ovaj problem muči ne samo programere koji rade u klasičnim programskim jezicima koji se kompajliraju za određeni sistem, već i programere web aplikacija koji moraju da razmišljju o različitim web čitačima i uređajima.
Kada izoštrimo svoje programerske veštine do kraja i mislimo da smo obavili odličan posao, pred nama se nalazi nezaobilazno pitanje - da li je softver lako koristiti? Ovo je kriterijum od koga zavisi da li sve što smo uradili pada u vodu. Čak i najbolji softverski alat predstavlja propalu investiciju ako korisnici odustanu jer ne umeju da ga koriste.
Blisko vezana sa lakoćom korišćenja je i funkcionalnost softvera, koja predstavlja mogućnosti koje ugrađujemo u svoj proizvod. Kod funkcionalnosti je najvažnije znati pravu meru - premalo mogućnosti će razočarati korisnika, ali to ne znači da moramo da napakujemo sve što zamislimo u finalni proizvod - tada će aplikacija možda biti previše kompleksna za korisnika i "teška" za resurse računara.
- B. Meyer (2000): Object-Oriented Software Construction, ISE, Santa Barbara