Az a mód, ahogyan egy-egy programozási nyelv létrehozására felhasználják a programozási alapfogalmakat. Valamint az a stílus, amit az így létrehozott nyelvek sugallnak.
Lényege, hogy minden objectnek az classon belül az állapotai privátak legyenek, hogy más objectek ne tudják azt direkt módosítani, esetleg publikus függvények segítségével, amiben szabályokat adhatunk meg, hogy minek kell teljesülnie, hogy a változtatás sikeres legyen.
Lényege, hogy egy nagy adatösszességből kiemeljük a közös, lényeges tulajdonságokat és viselkedésmódokat, az eltérőeket, lényegteleneket pedig elhanyagoljuk. Ennek az előnye, hogy az így kinyert adatokat akár másik programhoz is felhasználhatjuk, akár bármilyen változtatás nélkül.
Lényege, hogy az egyik objekt tulajdonságai átadhatóak legyenek a másik objektnek (újrafelhasználhatóság). Pl: gyümölcsök esetén. Ha van egy Fruit classunk, akkor amit abba beleírunk, az az összes gyümölcsre igaz lesz, és örökölhetik. Az adott classhoz meg hozzáírjuk a sajátosságait, ha szükséges.
Akkor van jelentősége, amikor több, egymással kapcsolatban álló classunk van az öröklődésnek köszönhetően. Például van egy animal classunk, és benne egy animalSound() függvény. Ezen animal class sub-classjai öröklődés esetén megkapják ezt a függvényt és sajátukként használhatják fel, vagyis felülírhatják (Overrideolhatják).
Olyan típus, amely pozíciót határoz meg egy halmazban (tároló, adatfolyam). Műveletein keresztül biztosítja a tároló bejárását, azaz a tárolt elemek egymás utáni feldolgozását.
Sajátos aggregáció, amikor a rész szorosan hozzátartozik az egészhez. A részek nem élik túl az egészet. Például az emberi agy szorosan hozzátartozik az emberhez.
Alapegysége az objektum orientált programozásnak, és egy adott osztályhoz kapcsolódóan jön létre. A létrehozás folyamata a példányosítás, egy osztálynak bármennyi példánya lehet.
Van jól definiált tárbeli címe, adott címen példányosított osztály attribútumai helyezkednek el, tehát az adott példányhoz tartozó adatrész jelenik meg.
Példányosítás során egy létező osztályhoz kapcsolódóan létrehozunk egy példányt, amihez hozzárendelődik egy tárcím, ahol beállítódik a kezdőállapot (az objektum mindenképpen kezdőállapotba kerül, olyan nincs, hogy állapota nem definiált). A kezdőállapotba hozás speciális eszköze a konstrukor, ennek csak példányosításkor van szerepe (new kulcsszó). Innentől kezdve az objektum él, és osztályának megfelelően viselkedik. A konstruktor ellentétes művelete a destruktor, általában a konstruktor lekötött erőforrásait szabadítja fel.
Az object-oriented programozásban minden class öröklődés szintjén áll kapcsolatban egymással. Minden class egy másik class subclass-a, ami a subclass fölött van, ő a superclass. Egy subclass minden olyat megörököl, amit a superclass tud, de tartalmazhat új információkat és újradefiniálhat régieket.
Ha minden classnak egy superclassa van, akkor azt egyszeres öröklődésnek hívjuk, ha több, akkor többszörös öröklődésnek.
Az egyszeres öröklődés osztályhierarchiája egy fa, a többszörösé pedig egy gráf.
Minden class legtetején pedig az Object class áll.
Ő a legalapabb class, neki nincs superclassa.
Amikor egy metódust meghívunk egy objektumon, akkor a metódus először az objektum osztályát keresi meg, utána annak a superclass-át, és így tovább fel a hierarchián.
OO-rendszerek általában megengedik a metódusnevek túlterhelését, adott osztályban lehetnek azonos nevű metódusok, ilyenkor az aktuális paraméterek számainak vagy sorrendjének megadása döntik el, melyik fut le.
Az OO lényege az, hogy az objektumok belső szerkezete el van rejtve a program többi része elől, az objektum állapotát csak az adott objektum ismeri, kívülről pedig csak szabályozottan, a metódusokon keresztül tudjuk ezt változtatni.
Az absztrakt osztályok célja, hogy egy blueprintet nyújtsanak a származtatott osztályoknak és felállítsanak néhány szabályt, amit a származtatott osztályoknak muszáj lesz implementálniuk, amikor megöröklik őket. Az absztrakt osztályok nem példányosíthatóak.
Lehetnek nem absztrakt metódusai is.
Nem támogatja a multiple inheritance-t.
Változóinak nem muszáj csak static és final-nak lenni, az interace-szel ellentétben.
Implementálhat interface-t, viszont az interface nem implementálhat abstract class-t.
Class tagjai lehetnek publicon kívül privátak és protectedek is, ellentétben az interface-szel.