В чем смысл ООП (объектно-ориентированного программирования)?
- DeveloperNotes »
- Объектно-ориентированное программирование »
- В чем смысл ООП (объектно-ориентированного программирования)?
Сколько книг написано, а понять всё равно почему-то сложно, когда сталкиваешься с этим в первый раз. Да ладно в первый - я 10 лет писал на PHP, и всё равно до конца не понимал. Давайте быстро разберемся.
Что такое ООП, своими словами?
Первое, что хочется сказать: программирование состоит в управлении сложностью. Сложность решаемой проблемы накладывается на сложность машины, на которой эта проблема решается. То есть, чтобы запрограммировать что-то сложное, например, банковскую систему, нельзя взять в руки ассемблер и начать писать. Сложность такой фиговины будет так высока, что человек (или сотня человек, не важно) вряд ли вообще решит ее.
Поэтому люди придумывали и придумывают разные подходы к программированию, которые призваны помочь программировать сложные вещи проще. Одним из таких подходов и является ООП. Если задуматься - довольно гениальная вещь-то!
Например, создатели Java стремились сократить сложность языка для обычных программистов. Обычно для решение такого же типа задач на C++ требуется в два раза (или больше) времени. Java является сплошным ООП не просто так.
Если в общем и целом, то ООП позволяет описать задачу в контексте самой задачи, а не в контексте компьютера, на котором решение исполнено. То есть, используя ООП, нужно думать не какие инструкции дать компьютеру, а как взаимодействуют сущности в самой задаче. В каком-то смысле ООП может описать любые "бизнес"-процессы с помощью самого себя.
Принципы ООП
Академический подход к ООП по Алану Кею такой:
1) Всё является объектом
2) Программа - это набор объектов, указывающих друг другу, что делать, посредством системы сообщения (т.е. вызывая методы друг друга)
3) Каждый объект имеет "память", состоящую из других объектов (например, принтер может хранить данные о накладной, которую надо распечатать)
4) У каждого объекта есть тип
5) Все объекты определенного типа могут получать одинаковые сообщения (то есть взаимозаменяемые; например: два разных принтера могут получать команду, указывающую, что надо что-то распечатать)
Комментарии