Istnieje wiele sposobów implementacji modelu obiektowego w językach zorientowanych obiektowo, a konkretne sposoby jego implementacji implikują różne zestawy właściwości języka. Niektóre z tych właściwości to hermetyzacja, polimorfizm, rodzaje generyczne (polimorfizm parametryczny), hierarchie (dziedziczenie i skład), podtypy i kilka innych. Są to potężne, wysokopoziomowe pomysły z precyzyjnymi definicjami, które nakładają ograniczenia na to, jak język powinien się zachowywać. Na razie nie przejmuj się nimi zbytnio; wyjaśnimy niezbędne w miarę postępów. Ciekawym ćwiczeniem jest znalezienie języków, które są uważane za zorientowane obiektowo, ale nie używają jednej lub więcej z tych właściwości. Na przykład koncepcja klasy jest niepotrzebna, co widać w przypadku języków opartych na prototypach, takich jak JavaScript. Podpisywanie jest również niepotrzebne, ponieważ nie ma sensu w językach dynamicznie typowanych, takich jak R czy Python. Moglibyśmy kontynuować i kontynuować, ale pojawia się idea, że jeden język, który ma wszystkie te właściwości, nie istnieje. Ponadto jedyną właściwością, którą można znaleźć we wszystkich językach zorientowanych obiektowo, jest polimorfizm. Dlatego ludzie powszechnie mówią, że polimorfizm jest istotą programowania obiektowego. Każdy profesjonalny programista obiektowy powinien rozumieć te właściwości i mieć formalne doświadczenie z językami, które je implementują. Jednak w następnych akapitach podamy ogólne wyjaśnienie tych najbardziej powszechnych w różnych modelach obiektów R – hermetyzację, polimorfizm (z i bez typów generycznych) i hierarchie.