|
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Объектно ориентированное программирование29.07.2011, 16:59. Показов 17701. Ответов 3
Метки нет (Все метки)
Я решил написать статью посвященную ООП, т.к. на нем основано современное программирование. Писал я эту статью для FAQ. И так, что же такое это ООП?
Первая часть Википедия: Объектно-ориентированное или объектное программирование— парадигма программирования, в которой основными концепциями являются понятия объектов и классов. Вряд ли кому это понятно, поэтому напишу попроще. Юрий Ковтанюк: ООП построено на использовании структурных единиц под названием «объекты», которые по своей сути напоминают записи. Можно определить, что объект – это некоторая совокупность данных, рассматриваемая как единое целое. Немного истории: В настоящее время программирование настроено на использование ООП. Структурированное программирование остается довольно успешным способом решения некоторых сложных проблем. Однако к концу 1980 готов стали очевидными недостатки. Кстати, структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Во-первых не было реализовано естественное желание думать о данных (например, записях служащих) и действиях над ними (редактировании, сортировке и т. д.) как о едином целом. Во-вторых, программисты обнаружили, что постоянно изобретают велосипед. Желание иметь возможность многократного использования рутинных блоков, повторяющихся в программе вполне естественно. Это напоминает сборку радиоприемника: конструктору не нужно каждый раз изобретать диоды и транзисторы. Он использует заранее подготовленные радиодетали. Но для разработчиков ПО такой возможности долгое времени не было. Внедрение в практику дружеского пользовательского интерфейса с рамочными окнами, меню и экранными кнопками определило новый подход к программированию. Программы стали выполняться не последовательно от начала и до конца, а отдельными блоками. При таком подходе программы становятся все более интерактивными, что необходимо учитывать при разработке. ООП стремиться отвечать этим требованиям, предоставляя технологию управления элементами любой сложности, создавая условия для многократного использования программных компонентов и объединяя данные с методами манипуляции ими. (Джесс Либерти) Сколько книг я ни читал, главным примером объектов является автомобиль. Соблюду традицию. Если надо создать виртуальную машину, мы можем объявить переменные, которые будут отвечать за кол-во дверей, объем бензобака, максимальная скорость и т.д. Любой автомобиль (в рабочем состоянии) может запустить двигатель (зажигание), а также его остановить. Эти действия можно объявить в процедурах:
Инкапсуляция представляет собой объединение внутри объекта его данных с процедурами и функциями, обрабатывающими эти данные. Рассмотрим это на объекте автомобиль. Для действия «Запуск двигателя» должны выполняться условия: наличие горючего, заряженный аккумулятор и т.д. – функция будет взаимодействовать с данными. Наследование – это механизм, позволяющий создавать иерархии объектов. При этом свойства объектов, расположенных на более высоких уровнях иерархии, автоматически относятся ко всем порожденным от них объектам. Рассмотрим все тот же пример с объектов «Автомобиль». Для этого объекта, можно создать порожденные объекты, например «Легковой» и «Грузовой». Оба эти объекта обладают свойствами «Автомобиля», а также собственными свойствами. Полиморфизм – это механизм, при котором действие с одним и тем же названием выполняется каждым объектом иерархии по-своему. В примере «Автомобиля» таким действием может служить «пуск двигателя». В бензинных автомобилях это происходит с помощью искры, в дизельных – посредством сжатия. Добавлено через 44 минуты Часть вторая Для описания объектов в Pascal используется тип Object:
Теперь перейдем к методам. Реализация объекта происходит вне объявления объекта. В объекте находится лишь проекция переменной. Например:
Часть третья (заключительная) В производных типах можно переопределять методы, унаследованные от родительского типа. Переопределять – значит использовать метод с одним и тем же названием, но с различной реализацией. Например
Пример объявления виртуального метода:
Для каждого типа объекта, содержащего виртуальные методы, в оперативной памяти создается так называемая таблица виртуальных методов, в которой содержатся указатели на код, соответствующий определенному виртуальному методу в каком-либо типе. Для каждого типа объекта создается только одна таблица, а отдельные экземпляры объекта, содержат лишь адрес этой таблицы. Значение адреса устанавливается специальной процедурой – конструктором. До вызова виртуального метода всегда нужно вызывать конструктор (если его не вызвать – не будет адреса на таблицу), который должен инициализировать данные объекта. Пример
1) Это хороший стиль. 2) Будет проще найти ошибки. 3) При изменении доступа к полям нужно будет только изменить функцию, а не многие части программы. Можно скрыть данные (сделать приватными) или открыть их на общий доступ (сделать публичными). Для этого используются два служебных слова private и public. Т.к. методы (описанные в объекте) имеют доступ даже к закрытым данным, то через них удобно организовывать получение значений полей. Поэтому, некоторые методы должны быть открытыми, а некоторые поля закрытыми. Пример:
2
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 29.07.2011, 16:59 | |
|
Ответы с готовыми решениями:
3
Объектно Ориентированное Программирование |
|
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
|
||
| 29.07.2011, 22:30 [ТС] | ||
|
Юрий Ковтанюк - Программирование на Турбо паскаль Джесс Либерти - С++ за 21 день Пресс-конференция Бьерна Страуструпа в 1990 году))
0
|
||
| 30.07.2011, 08:32 | |
|
0
|
|
| 30.07.2011, 08:32 | |
|
Помогаю со студенческими работами здесь
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(), которая. . .
|