Для классов или типов следует поддерживать наследование
Наследование обладает двумя достоинствами:
Следующий пример иллюстрирует потребность наличия в системе наследования. Допустим, что мы имеем дело со Cлужащими и Студентами. Каждый Cлужащий
имеет имя, возраст более 18 лет и оклад, он или она может умереть, выйти замуж или жениться или получить зарплату (как скучна жизнь Cлужащего!). Каждый Студент имеет имя, возраст и множество оценок. Он или она может умереть, выйти замуж или жениться, и для него или нее может быть вычислен GPA (Grade Point Average, средний академический балл).
В реляционной системе проектировщик базы данных определяет отношение для Cлужащего, отношение для Студента, пишет программы для реализации операций умереть, жениться и получить зарплату над отношением Cлужащий
и программы для реализации операций умереть, жениться, и вычислить GPA над отношением Студент. Таким образом, прикладной программист должен написать шесть программ.
В объектно-ориентированной системе, используя свойство наследования, мы распознаем, что каждый Cлужащий и Студент является Человеком; таким образом, они имеют кое-что общее (то, что каждый из них является Человеком) и некоторые различия.
Мы вводим тип Человек, атрибутами которого являются имя и возраст
и пишем программы для реализации операций умереть и жениться для этого типа. Затем мы объявляем, что Cлужащие являются особой разновидностью Человека, в которой наследуются атрибуты и операции типа Человек и имеются свои собственные атрибут оклад и операция получить зарплату. Аналогично, мы объявляем, что Студент является специальной разновидностью Человека со своими собственными атрибутом набор оценок и операцией вычислить GPA. В этом случае мы имеем более структурированное и краткое описание схемы (мы факторизовали спецификацию), и нам потребовалось написать всего четыре программы (мы факторизовали реализацию).