Другие языки программирования и технологии

Объясните что такое объектно-ориентированное программирование просто и понятно, желательно с примерами (с++)

Со временем аппаратные возможности вычислительной техники росли семимильными шагами, в то время, как мозги у человека прогрессировали значительно медленнее. Такой рост возможностей компьютеров позволяет писать программы огромного размера. Но чем больше программа тем вероятнее в ней допустить ошибку. Вопрос только в квалификации программиста. Чем длиннее программный модуль, и чем хуже программист, тем больше в ней встречается ошибок. И тем труднее их отыскивать. Так в начале, наиболее часто повторяющиеся куски программы стали использовать как подпрограммы (процедуры) . Затем возникло функциональное программирование. Эти возможности явилось прообразами методов класса. Класс - явился той минимальной единицей кода, который можно один раз написав, в дальнейшем использовать в любой программе, создавая его объект (экземпляр) и через этот объект использовать все его функциональные возможности. Возможности для классов выстраивать наследственную иерархию, осуществлять запрет (сокрытие) к полям и методам класса, и возможность по разному реализовывать объекты с одинаковой спецификацией, сделали объектно-ориентированное программирование наиболее рациональным для создания современных программ.
Дидар Серкебаев
Дидар Серкебаев
69 628
Лучший ответ
Представь себе ящик. У ящика есть свойства. Некоторые свойства представляют собой числа - длина, ширина, высота. Другие свойства это текст - на ящике написано "не контовать". А ещё у ящика есть свойство - это крышка. Крышка тоже некий объект, со своими свойствами.

Кроме свойств, ящик имеет "методы", т. е. "процедуры". В них написано что делать с этим ящиком: как его хранить, как перевозить.

Ещё у ящика есть "события". Это тоже "процедуры", которые срабатывают при определённом внешнем воздействии. Например, "при открытии крышки ящика", "при его создании", "перед его уничтожением".

Вот это и есть объект. Вернее его прототип или чертёж, так называемый "класс".

Вот теперь представь грузовик, в котором лежат куча одинаковых ящиков. Все они сделаны по одному чертежу (из одного и того же класса) , т. е. представляют собой "экземпляры класса" или "объекты", но у каждого своя особенность - в свойстве "товар" написано, например КАРТОШКА, АПЕЛЬСИНЫ. Представь себе грузчика, который выгружает ящики. Грузчик должен разложить ящики по содержимому. Вот он смотрит "ога, вот тут картошка, его кладу влево", "а вот тут вижу апельсины, его кладу вправо".

Вот программа "Грузчик", внутри которой создаются объекты "ящики", и программа хочет их отсортировать. Программа думает "я знаю, что эти вот ящики созданы из класса ЯЩИК, и поэтому знаю что где-то тут сбоку есть надпись, означающая содержимое. Вот туда я посмотрю и решу куда его положить".

Вот то, что куча ящиков имеет похожие свойства и методы, потому что создана на базе одного класса ЯЩИК - называется ПОЛИМОРФИЗМ. Я захотел сделать эти ящики не из досок, а из фанеры. Для этого я редактирую класс ЯЩИК и впредь у всех создаваемых экземлляров в свойстве МАТЕРИАЛ будет не "доска", а "фанера". И меня не волнует количество ящиков, захочу сделаю ещё пару сотен. И мне не нужно будет для каждого ящика писать код "типо сделать переменную, которая означает цвет ящика 1, потом ящика 2 и так до полусмерти писать код". Вместо этого я напишу код "типо ящик1=СОЗДАТЬ ОБЪЕКТ из КЛАССА ЯЩИК", и все необходимые свойства уже готовы.

Дальше программа "грузчик" должна отличать надпись "Содержимое ящика 1" от надписи "Содержимое ящика 2". Вместо создания кучи переменных с разными названиями, программа может обращаться к объектам-ящикам: ящик1.Содержимое, ящик2.Содержимое и так далее. Вот то, что "Содержимое" относится к конкретному объекту - называется ИНКАПСУЛЯЦИЯ. Т. е. я спокойно буду писать "типо мне нужно свойство СОДЕРЖИМОЕ у ящика1".

А вот теперь представь, что я создал на базе чертежа ЯЩИК ещё один более сложный чертёж ЯЩИК С РУЧКАМИ. В дочернем чертеже я приделал к ящику две ручки для переноски. А потом ещё один чертёж ЯЩИК С ДЫРКАМИ, где вместо ручек просто прорезал по бокам дырки для держания. Через год мне понадобилось заменить все гвозди в ящиках на шурупы для надёжности. Для этого я редактирую чертёж ЯЩИК, где в свойстве КРЕПЛЕНИЕ меняю "гвозди" на "шурупы". Дочерние классы "ЯЩИК С РУЧКАМИ" и "ЯЩИК С ДЫРКАМИ" унаследуют это усовершенствование. Прикинь, сколько кода и программ мне бы пришлось переписывать, не будь у меня такого объектного программирования! А тут я в одном месте поменял что-то и это унаследовалось в дочерние классы и применилось во всех программах (а не только в Грузчике) . Вот это называется НАСЛЕДОВАНИЕ.

ООП - это программирование с использованием принципов ИНКАПСУЛЯЦИИ, НАСЛЕДОВАНИЯ и ПОЛИМОРФИЗМА.
Можно создавать объекты, которые имеют свои параметры (поля) и могут производить действия (методы) , скажем, менять свои параметры. Пример:

класс Человек {
инт рост;
инт вес;
публик:
воид ВырастиНа (инт см) ;
воид ПоправитьсяНа (инт кг) ;
};

// далее описываем методы

воид Человек:: ВырастиНа (инт см) {
рост = рост + см; // а лучше написать "рост+=см; "
}

воид Человек:: ПоправитьсяНа (инт кг) {
вес += кг;
}

Пока всё. Прошу прощения за транслит. Английский тут не принимается.
Влад Гаць
Влад Гаць
258