Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/92: Рейтинг темы: голосов - 92, средняя оценка - 4.59
 Аватар для Даня98
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145

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

29.07.2011, 16:59. Показов 17701. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я решил написать статью посвященную ООП, т.к. на нем основано современное программирование. Писал я эту статью для FAQ. И так, что же такое это ООП?
Первая часть
Википедия: Объектно-ориентированное или объектное программирование— парадигма программирования, в которой основными концепциями являются понятия объектов и классов. Вряд ли кому это понятно, поэтому напишу попроще.
Юрий Ковтанюк: ООП построено на использовании структурных единиц под названием «объекты», которые по своей сути напоминают записи. Можно определить, что объект – это некоторая совокупность данных, рассматриваемая как единое целое.
Немного истории: В настоящее время программирование настроено на использование ООП. Структурированное программирование остается довольно успешным способом решения некоторых сложных проблем. Однако к концу 1980 готов стали очевидными недостатки. Кстати, структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.
Во-первых не было реализовано естественное желание думать о данных (например, записях служащих) и действиях над ними (редактировании, сортировке и т. д.) как о едином целом.
Во-вторых, программисты обнаружили, что постоянно изобретают велосипед. Желание иметь возможность многократного использования рутинных блоков, повторяющихся в программе вполне естественно. Это напоминает сборку радиоприемника: конструктору не нужно каждый раз изобретать диоды и транзисторы. Он использует заранее подготовленные радиодетали. Но для разработчиков ПО такой возможности долгое времени не было.
Внедрение в практику дружеского пользовательского интерфейса с рамочными окнами, меню и экранными кнопками определило новый подход к программированию. Программы стали выполняться не последовательно от начала и до конца, а отдельными блоками. При таком подходе программы становятся все более интерактивными, что необходимо учитывать при разработке. ООП стремиться отвечать этим требованиям, предоставляя технологию управления элементами любой сложности, создавая условия для многократного использования программных компонентов и объединяя данные с методами манипуляции ими. (Джесс Либерти)
Сколько книг я ни читал, главным примером объектов является автомобиль. Соблюду традицию. Если надо создать виртуальную машину, мы можем объявить переменные, которые будут отвечать за кол-во дверей, объем бензобака, максимальная скорость и т.д. Любой автомобиль (в рабочем состоянии) может запустить двигатель (зажигание), а также его остановить. Эти действия можно объявить в процедурах:
Pascal
1
2
procedure start;
procedure stop;
Но не проще ли объединить переменные и функции в одно целое? Это сделает написание программы проще, также станет проще искать ошибки в программе? Объединив все это, мы получим объект. Как известно, ООП «стоит на трех слонах». Эти три слона: инкапсуляция, наследование и полиморфизм.
Инкапсуляция представляет собой объединение внутри объекта его данных с процедурами и функциями, обрабатывающими эти данные. Рассмотрим это на объекте автомобиль. Для действия «Запуск двигателя» должны выполняться условия: наличие горючего, заряженный аккумулятор и т.д. – функция будет взаимодействовать с данными.
Наследование – это механизм, позволяющий создавать иерархии объектов. При этом свойства объектов, расположенных на более высоких уровнях иерархии, автоматически относятся ко всем порожденным от них объектам. Рассмотрим все тот же пример с объектов «Автомобиль». Для этого объекта, можно создать порожденные объекты, например «Легковой» и «Грузовой». Оба эти объекта обладают свойствами «Автомобиля», а также собственными свойствами.
Полиморфизм – это механизм, при котором действие с одним и тем же названием выполняется каждым объектом иерархии по-своему. В примере «Автомобиля» таким действием может служить «пуск двигателя». В бензинных автомобилях это происходит с помощью искры, в дизельных – посредством сжатия.

Добавлено через 44 минуты
Часть вторая
Для описания объектов в Pascal используется тип Object:
Pascal
1
2
3
4
5
6
type
имя_типа = object
поле: тип;
поле: тип;
метод;
end;
Поля объектов есть полная аналогия с записями полей. Методы – процедуры и функции, обрабатывающие поля объектов. Пример:
Pascal
1
2
3
4
5
6
7
8
type
Car = object
Color: string;
Weight: real;
Smax: real;
Procedure Start;
Procedure Stop;
End;
Названия объектов начинаются с заглавной буквы, что соответствует соглашению языка Pascal. Далее объявляется переменная указанного типа:
Pascal
1
Var Citroen: Car;
Обращение к полям и методам аналогична обращению к полям записи:
Pascal
1
2
3
4
Citroen.Color:= ‘Black’;
Citroen.Weight:= 1.6;
Citroen.Start;
Citroen.Stop;
Динамическое создание объекта:
Pascal
1
2
3
4
5
6
7
Var Citroen: ^Car;
Begin
New (Citroen);
Citroen^.Color:= ‘Black’;
Citroen^.Start;
Citroen^.Stop;
End;
Как упоминалось, производный тип наследует все свойства родительского типа. Для создания производных типов используется конструкция:
Pascal
1
2
3
4
Type
Sedan = object(Car)End;
В языке Pascal, допускается обратная совместимость объектных типов. Например, если объявлена процедура WriteInfo (c: car), то в нее можно передать переменную типа Sedan или Car. Если объявлена процедура WriteInfo (c: Sedan), то в нее может быть передана переменная типа Sedan, или переменная производная от него.

Теперь перейдем к методам. Реализация объекта происходит вне объявления объекта. В объекте находится лишь проекция переменной. Например:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Type Car = class
Fuel, doors: longint;
Color: string;
procedure newcolor (s: string);
end;
 
procedure Car.newcolor(s: string);
begin
color:= s;
end;
 
var c: car;
begin
c.newcolor ('Белый');
end.
Добавлено через 1 минуту
Часть третья (заключительная)
В производных типах можно переопределять методы, унаследованные от родительского типа. Переопределять – значит использовать метод с одним и тем же названием, но с различной реализацией. Например
Pascal
1
2
Procedure Car.newcolor (s: string);
Procedure Sedan.newcolor (s: string);
Все методы, которые я представлял в примерах – статическими. Это означает, если в производном типе не переопределен метод, то он будет работать с данными родительского типа. При вызове не переопределённого статического метода на самом деле вызывается метод, который может не иметь доступа к некоторым данным вызывающего объекта т.к. ссылки на статические методы определяются во время компиляции программы, и компилятор относит их к определенному типу. Решением этой проблемы является использование виртуальных методов, ссылки на которые определяются во время выполнения программы, благодаря чему метод сопоставляется именно с типом вызывающего объекта.
Пример объявления виртуального метода:
Pascal
1
Procedure Start; virtual;
ЗАГОЛОВКИ ВСЕХ ОДНОИМЕННЫХ ВИРТУАЛЬНЫХ МЕТОДОВ, ДОЛЖНЫ БЫТЬ ИДЕНТИЧНЫ, ВКЛЮЧАЯ НАБОР ПАРАМЕТРОВ И ИХ ТИПЫ!!!
Для каждого типа объекта, содержащего виртуальные методы, в оперативной памяти создается так называемая таблица виртуальных методов, в которой содержатся указатели на код, соответствующий определенному виртуальному методу в каком-либо типе. Для каждого типа объекта создается только одна таблица, а отдельные экземпляры объекта, содержат лишь адрес этой таблицы. Значение адреса устанавливается специальной процедурой – конструктором. До вызова виртуального метода всегда нужно вызывать конструктор (если его не вызвать – не будет адреса на таблицу), который должен инициализировать данные объекта. Пример
Pascal
1
2
3
4
5
6
7
8
9
Type Car = ObjectConstructor Initialize (a,b: byte);
End;
 
Constructor Car.Initialize (a,b: byte);
BeginEnd;
Одним из важнейших принципов ООП является то, что при разработке программы необходимо помнить о взаимосвязи данных и обрабатывающих их методов. Доступ к важным полям следует производить через методы. Если придерживаться этого указания, в вашей программе появятся плюсы:
1) Это хороший стиль.
2) Будет проще найти ошибки.
3) При изменении доступа к полям нужно будет только изменить функцию, а не многие части программы.
Можно скрыть данные (сделать приватными) или открыть их на общий доступ (сделать публичными). Для этого используются два служебных слова private и public.
Т.к. методы (описанные в объекте) имеют доступ даже к закрытым данным, то через них удобно организовывать получение значений полей. Поэтому, некоторые методы должны быть открытыми, а некоторые поля закрытыми. Пример:
Pascal
1
2
3
4
5
6
7
Type Car = object
    Private 
Color: string;
Public
 Procedure Getcolor;
Procedure SetColor;
End;
Объекты могут содержать указатели на динамические структуры или объекты, которые необходимо удалить из памяти в определенном порядке. В этом случае процедуры Dispose недостаточно. В языке Pascal эту задачу выполняют деструкторы. В деструкторах процесс удаления объектов объединяется с другими действиями, которые необходимо выполнить для данного типа объектов. Деструкторы можно наследовать, и они могут быть как статическими, так и виртуальными. Пример:
Pascal
1
2
3
Type Car = object
Destructor DInit;
End;
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2011, 16:59
Ответы с готовыми решениями:

Объектно-ориентированное программирование
Можете пожалуйста написать программу для этой задачи? Базовый класс - "Жилье", виртуальный метод - "стоимость" (без...

Объектно-ориентированное программирование
Используя ООП, определить объект КОМЛЕКСНОЕ ЧИСЛО. Организовать его ввод и вывод в виде a-ib.

Объектно Ориентированное Программирование
Ребят помогите решить задачу:cry: Дан Предок круг и его потомок конус. У предка вычислить площадь, а у потомка площадь и объем. Заранее...

3
Фрилансер
Эксперт С++
 Аватар для Dekio
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,373
Записей в блоге: 1
29.07.2011, 21:54

Не по теме:

100500 вопросов по синтаксису языка, и уже прям писатель? :wall:



Копирайты на первоисточники оставьте
0
 Аватар для Даня98
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
29.07.2011, 22:30  [ТС]
Цитата Сообщение от Dekio Посмотреть сообщение
Копирайты на первоисточники оставьте
wikipedia.org
Юрий Ковтанюк - Программирование на Турбо паскаль
Джесс Либерти - С++ за 21 день
Пресс-конференция Бьерна Страуструпа в 1990 году))
0
30.07.2011, 08:32

Не по теме:

Цитата Сообщение от Даня98 Посмотреть сообщение
Я решил написать статью
Цитата Сообщение от Даня98 Посмотреть сообщение
wikipedia.org
Юрий Ковтанюк - Программирование на Турбо паскаль
Джесс Либерти - С++ за 21 день
Пресс-конференция Бьерна Страуструпа в 1990 году))
паржаль...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2011, 08:32
Помогаю со студенческими работами здесь

Объектно-ориентированное программирование
Опишите тип объектов – линия с параметрами: координаты вершин, стороны, цвет. Пусть методами будут А) порождение линии; Б) изменение ее...

Объектно-ориентированное программирование
Опишите тип объектов – квадратов с параметрами: координаты вершин, стороны, цвет. Пусть методами будут 1) порождение квадрата; 2) изменение...

Объектно-ориентированное программирование
Представляющие различных певчих птичек. В программе случайным образом птички появляются на экране и поют в течение определенного времени.

Объектно-ориентированное программирование
Объект: поле -одномерный массив; методы - основные методы работы с массивами, найти наибольший элемент между i-ым и j-ым элементами;...

Объектно-ориентированное программирование (ООП)
Разработать программу на основе классов для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru