Лямбда-исчисление церкви Alonzo является математической теорией позади функциональных языков. Имеет объектно-ориентированное программирование некоторую формальную теорию?
ООП - это немного смешанный мешок возможностей, которые различные языки реализуют немного по-разному. Не существует единого формального определения ООП, но ряд людей пытались описать ООП, основываясь на общих чертах языков, претендующих на объектно-ориентированность. Из Википедии:
Бенджамин Куайр Пирс и некоторые другие исследователи считают тщетными любые попытки свести ООП к минимальному набору характеристик. Тем не менее, он выделяет фундаментальные особенности, которые поддерживают стиль программирования ООП в большинстве объектно-ориентированных языков:
- Динамическая диспетчеризация - когда метод вызывается на объекте, объект сам определяет, какой код будет выполнен, просматривая метод во время выполнения в таблице, связанной с объектом. Эта особенность отличает объект от абстрактного типа данных (или модуля), который имеет фиксированную (статическую) реализацию операций для всех экземпляров. Это методология программирования, которая обеспечивает модульную разработку компонентов и в то же время является очень эффективной.
- Инкапсуляция (или мультиметоды, в этом случае состояние хранится отдельно)
- Полиморфизм подтипов
- Наследование объектов (или делегирование)
- Открытая рекурсия - специальная переменная (синтаксически это может быть ключевое слово), обычно называемая this или self, которая позволяет телу метода вызывать другое тело метода того же объекта. Эта переменная имеет позднюю привязку; она позволяет методу, определенному в одном классе, вызывать другой метод, определенный позже, в каком-то его подклассе.
Я бы заглянул на страницу википедии на OO http: // en .wikipedia.org / wiki / Объектно-ориентированное_программирование В нем есть принципы, основы и история.
Насколько я понимаю, это было эволюционное развитие функций и идей на множестве языков, которые, наконец, объединились с толчком в 90-х, направленным на то, чтобы GUI стал мейнстримом. Но я мог бы быть ужасно неправ :-D
Edit: Что еще более интересно, люди до сих пор спорят о том, «что делает объектно-ориентированный язык объектно-ориентированным». Я не уверен, что набор функций хотя бы в целом согласован, что определяет ОО язык.
Одно из формальных определений, с которыми я столкнулся для строгого определения и ограничения подтипов, - это Принцип подстановки Лискова . Это, конечно, не все объектно-ориентированное программирование, но все же оно может служить связующим звеном с формальными основами разработки.