Понятие об объектно-ориентированном программировании
Объектно-ориентированным называется стиль (набор принципов, парадигма) программирования, предполагающий, что предметную область удобнее всего описывать как совокупность взаимодействующих объектов. Под объектом подразумевается программная сущность, обладающая внутренними свойствами (полями) и способная выполнять связанные с ее особенностями алгоритмы (методы).
Основными свойствами ООП являются:
- инкапсуляция — описание объектов как типов данных (классов) имеющих общие поля и методы;
- наследование — создание новых классов на основе уже имеющихся; класс-потомок обладает свойствами класса-родителя и дополняет их собственными возможностями;
- полиморфизм — возможность, зная общие черты иерархии классов, ссылаться на любой из нее как на наиболее общий класс-родитель.
Рисунок 1. Свойства ООП. Автор24 — интернет-биржа студенческих работ
Класс в ООП это "чертеж" объекта, определяющий какими полями и методами будет обладать каждый созданный в соответствии с этим описанием объект.
Объекты в концепции ООП - контейнеры для хранения и преобразования информации. Программа при этом представляет собой совокупность объектов, взаимодействующих друг с другом посредством обмена "сообщениями", т.е. вызывая методы друг друга с передачей необходимых параметров и получая возвращаемые значения, которые, в свою очередь тоже могут быть объектами.
Поля (внутренние свойства) объектов могут представлять собой как примитивы (числа, строки и т.п.), так и быть сложными объектами. Например, объект "Автомобиль" можно описать как совокупность объектов "Двигатель", "Трансмиссия", "Кузов", "Салон", "Колеса". Каждый из этих объектов сам по себе сложен. Например, в состав объекта "Двигатель" могут входить объекты "Блок цилиндров", "Поршни", "Коленвал" и т.п.
Рисунок 2. Иерархия классов пользовательского интерфейса в Java. Автор24 — интернет-биржа студенческих работ
Разлагая предметную область на всё более элементарные объекты, программист имеет возможность преобразовать ее в совокупность простых, легко контролируемых, объединенных по естественным признакам сущностей. Составляя из них все более сложные объекты, можно добиться уровня абстракции, позволяющего контролировать всю предметную область с достаточной для практики достоверностью.
Достоинством ООП является то, что оно позволяет распределить работу по описанию сложных объектов между большим количеством программистов. С другой стороны, ООП применяется, как правило, для решения масштабных задач в организациях, которые могут позволить себе выделять большие бюджеты на разработку ПО: в банках, крупных научно-исследовательских центрах, государственных организациях.
Наиболее популярные объектно-ориентированные языки программирования
Первыми успешными объектно-ориентированными языками считаются Симула-67 и Smalltalk-80. Расцвет популярности ООП пришелся на вторую половину 1980-х гг., когда появились такие языки, как С++, Objective C (эти два языка были разработаны на основе не являющегося объектно-ориентированным, но очень популярного Си), Eiffel. Некоторые существовавшие на тот момент языки были доработаны с целью предоставить своим приверженцам возможность работать в стиле ООП (Ada, Lisp, Pascal).
Большим шагом вперед в развитии ООП стал язык Java. Он сосредоточил в себе, помимо объектно-ориентированного подхода, наиболее эффективные технологии, появившиеся в начале 1990-х, такие, как:
- ссылочный синтаксис: объекты создаются таким образом, чтобы невозможно было напрямую (через адреса ячеек памяти, т.н. указатели) повлиять на состояние этих объектов;
- автоматическая сборка мусора: программист избавлен от необходимости вручную очищать память от переменных, которые больше не понадобятся;
- кроссплатформенность - способность программ запускаться на различных платформах (слоган Java - "написано однажды - работает везде");
- защита полей и методов от нежелательного влияния со стороны других классов: например, поле, помеченное как
private
, доступно для чтения и записи только изнутри класса,protected
- только из иерархии, в состав которой входит класс,public
- для любых объектов.
Дополнительным обстоятельством, сделавшим Java влиятельным и пригодным для коммерческого использования языком стало то, что его создание велось компанией Sun, обладавшей большими финансовыми и технологическими возможностями.
Всплеск популярности Java побудил другого крупного игрока на софтверном рынке - компанию Microsoft - создать аналогичные продукты. Сначала компания Билла Гейтса хотела выпустить "собственную версию" Java, однако, поскольку написанные на этом языке программы были рассчитаны на запуск лишь в среде Windows (терялась кроссплатформенность), со временем Microsoft решила разработать собственные фреймворк с похожими на Java свойствами. Так появилась платформа .NET и связанный с ней язык C# (Си-шарп). В настоящее время C# считается предпочтительным языком для разработки под Windows. При написании программ на нем применяется преимущественно объектно-ориентированный стиль разработки.
В настоящее время ООП нельзя назвать доминирующей парадигмой программирования. Из языков, бурно развивавшихся в годы наивысшего интереса к этой технологии, активно продолжают использоваться C++, Java, C#. Нынешние языки не делают основную ставку на ООП, но поддерживают эту возможность, поскольку среди программистов остается немало приверженцев этого подхода. Так, объектно-ориентированные программы можно писать на таких популярных в настоящее время языках, как Python, JavaScript, PHP и другие.
языки программирования. Автор24 — интернет-биржа студенческих работ" />
Рисунок 3. Популярные объектно-ориентированные языки программирования. Автор24 — интернет-биржа студенческих работ
Пример программы в стиле ООП (JavaScript)
class Hello {
constructor(){
this.message = this.getMessage()
}
sayHello(){
console.log(this.message)
}
getMessage(){return 'Hello, World!'}
}
class HelloRus extends Hello{ // Класс, расширяющий предыдущий.
getMessage(){return 'Привет, Мир!'} // Переопределяем метод в классе-наследнике.
}
let hello = new Hello
hello.sayHello()
hello = new HelloRus
hello.sayHello()