29 сентября 2011 г.

Объектно-ориентированное программирование!

Статья не моя. Размещена здесь лишь для удобства.
Ссылка на оригинал статьи размещена в нижней части страницы.


Мы живем в мире объектов. Стол, автомобиль, ручка, классная доска – все это объекты. Наряду с физическими существуют так же абстрактные объекты, типичными представителями которых являются числа. Таким образом, объект – это любая физическая или абстрактная четко идентифицируемая сущность. Объект – это общефилософское понятие, которое изучалось философами на протяжении длительного времени.

Объекты характеризуются атрибутами. Так атрибутами автомобиля являются максимальная скорость, мощность двигателя, цвет кузова и т. д. Атрибутами усилителя являются частотный диапазон, выходная мощность, коэффициент нелинейных искажений, уровень шума и т. д.

Помимо атрибутов объекты обладают некоторыми функциональными возможностями, которые в объектно-ориентированном программировании (ООП) называют операциями или методами. Так автомобиль может ездить, корабль – плавать, компьютер – производить вычисления.

Таким образом, объект инкапсулирует атрибуты и методы, скрывая от других объектов взаимодействующих с ним и использующих его функциональность, свою реализацию. Так для того чтобы переключить телевизионную программу нам достаточно на пульте дистанционного управления набрать ее номер, что запустит сложный механизм, который в итоге и приведет к желаемому результату. Нам совершенно не обязательно знать, что происходит в пульте дистанционного управления и телевизоре, нам лишь достаточно знать, что телевизор обладает такой возможностью (методом) и как ее можно активировать. Инкапсуляция или сокрытие реализации является базовым свойством ООП. Она позволяет создавать пользовательские объекты, обладающие требуемыми методами и далее оперировать ими, не вдаваясь в устройство этих объектов.

Классы могут быть связаны друг с другом различными отношениями. Одним из основных таких отношений является отношение класс – подкласс, известный в объектно-ориентированном программировании как наследование. Например, класс автомобилей Audi 6 является подклассом легковых автомобилей, который в свою очередь входит в более крупный класс автомобилей, а последний является подклассом класса транспортных средств, который помимо автомобилей включает в себя самолеты, корабли поезда и т. д.

При наследовании все атрибуты и методы родительского класса наследуются классом-потомком. Наследование может быть многоуровневым, и тогда классы, находящиеся на нижних уровнях иерархии, унаследуют все свойства (атрибуты и методы) всех классов, прямыми или косвенными потомками которых они являются. Класс B унаследует атрибуты и методы класса A и, следовательно, будет обладать атрибутами A, B, C и D и методами A, B, C и D, а класс C – атрибутами A, B, C, E, F и методами A, B и E.

При наследовании одни методы класса могут замещаться другими. Так, класс транспортных средств будет обладать обобщенным методом движения. В классах-потомках этот метод будет конкретизирован: автомобиль будет ездить, самолет – летать, корабль – плавать. Такое изменение семантики метода называется полиморфизмом. Полиморфизм – это выполнение методом с одним и тем же именем различных действий в зависимости от контекста, в частности, от принадлежности тому или другому классу. В разных языках программирования полиморфизм реализуется различными способами. Например, в C++ он реализован с помощью механизма виртуальных функций.


оригинал статьи: http://www.structuralist.narod.ru/it/internet/oop.htm