Файл: Основные понятия объектно-ориентированного программирования (История создания объектно-ориентированного программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 112

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

Почему задуманный проект при расширении столь быстро может превратиться в кучу запутанного кода с тучей багов? Дело в том, что новички пишут код, который делает только то, что от него требуется в одной конкретной ситуации и не предусматривает внесение каких-либо изменений. Такой подход не приемлем, особенно для веб-приложений, которые неизбежно должны будут расти и развиваться если, конечно, будут популярны. Рано или поздно им, а может и другим разработчикам, будет необходимо возвращаться к написанному ранее коду и вносить в него изменения и чем проще это будет сделать, тем быстрее приложение будет развиваться и набирать популярность.

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

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

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


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

Объектная декомпозиция имеет несколько преимуществ перед алгоритмической:

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

Объект исследований – объектно-ориентированное программирование.

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

Цель работы – получить знания по данной теме.

Для достижения цели необходимо решить следующие задачи:

1. Исследовать предметную область.

2. На основании теоретического анализа изучения проблемы, собрать требуемые данные по указанной теме.

3. Систематизировать и обобщить существующие в специальной литературе, научные подходы к данной проблеме.

Теоретическая значимость проведенного исследования состоит в обобщении научного знания по данной проблеме.

Практическая значимость работы выражается в получении навыков и умения программирования.

Успешность выполнения задач по написанию работы в наибольшей степени зависит от выбранных методов исследования.

В работе использовались методы как эмпирического исследования: сравнительно-сопоставительный, наблюдение, так и используемые как на эмпирическом, так и на теоретическом уровне исследования: абстрагирования, анализ и синтез.

Из всего многообразия литературы считаю наиболее приемлемыми для себя и работы следующих авторов Гагарина Л. Г. , Ездаков А. Л. , Карпенков С. Х. , Колдаев В. Д. , Кудинов Ю. И. , Лазарева И. М., Малявко А. А., Орлов С. А., Тузовский А. Ф. , Федорова Г. Н. , Черпаков И. В.


Структура курсовой работы состоит из введения, трех глав, заключения и списка литературы.

Глава 1. История создания объектно-ориентированного программирования

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

ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны[1]. Для дальнейшего развития объектно-ориентированного программирования большое значение имели понятия события (в рамках событийно-ориентированного программирования) и компонента (в контексте компонентного программирования)[2].

Практически сразу после появления языков третьего поколения (1967 г.) ведущие специалисты в области программирования выдвинули идею преобразования постулата фон Неймана: «данные и программы неразличимы в памяти машины». Их цель заключалась в максимальном сближении данных и программы. Решая поставленную задачу, они столкнулись с задачей, решить которую без декомпозиции оказалось невозможно, а традиционные структурные декомпозиции не сильно упрощали задачу[3]. Усилия многих программистов и системных аналитиков, направленные на формализацию подхода, увенчались успехом.

Были разработаны три основополагающих принципа того, что потом стало называться объектно-ориентированным программированием (ООП):

- наследование;

- инкапсуляция;

- полиморфизм.

Результатом их первого применения стал язык Симула-1 (Simula-1), в котором был введен новый тип – объект. В описании этого типа одновременно указывались данные (поля) и процедуры, их обрабатывающие – методы. Родственные объекты объединялись в классы, описания которых оформлялись в виде блоков программы. При этом класс можно использовать в качестве префикса к другим классам, которые становятся в этом случае подклассами первого.


Впоследствии Симула-1 был обобщен, и появился первый универсальный ООП-ориентированный язык программирования – Симула-67 (67 – по году создания)[4].

Как выяснилось, ООП оказалось пригодным не только для моделирования (Simula) и разработки графических приложений (SmallTalk), но и для создания большинства других приложений, а его приближенность к человеческому мышлению и возможность многократного использования кода сделали его одной из наиболее бурно используемых концепций в программировании[5].

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

Глава 2. Теоретические основы объектно-ориентированного программирования

2.1. Основные понятия объектно-ориентированного программирования

ООП является весьма популярной парадигмой программирования, которая заменила устаревший процедурный подход в программировании[6].

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

Класс - это тип, определяемый программистом, в котором объединяются структуры данных и функции их обработки. Конкретные переменные типа данных «класс» называются экземплярами класса, или объектами[7].

Класс содержит константы и переменные, называемые полями, а также выполняемые над ними операции и функции[8]. Функции класса называются методами (другое название — функции-члены). Предполагается, что доступ к полям класса возможен только через вызов соответствующих методов. Поля и методы являются элементами (членами) класса.


Методы, расположенные в открытой части, формируют интерфейс класса и могут свободно вызываться клиентом через соответствующий объект класса. Доступ к закрытой секции класса возможен только из его собственных методов, а к защищенной — из его собственных методов, а также из методов классов-потомков. Класс — это «Совокупность свойств, методов и событий[9]». При этом «совокупность» означает, что функционирование класса обеспечивается в совокупности методами, свойствами и событиями.

Под объектом понимается экземпляр класса. Объект функционирует как единое целое, реагируя соответствующими методами на соответствующие события класса. Разница между понятиями объекта и класса заключается в том, что посредством класса осуществляется описание какой-либо сущности, что работает как шаблон, основа[10].

Немаловажно, что каждый класс должен включать в себя два обязательных метода: создать объект (конструктор), уничтожить объект (деструктор), а процесс создания объекта именуется инициализацией[11]. Эти методы выделяют под свойства объекта память и освобождают ее, а также

. В качестве примера рассмотрим класс Human:

class Human {

private $words;

public function setWords($words) {

$this->words = $words;

}

public function getWords() {

return $this->words;

}

public function sayIt() {

return $this->getWords();

}

}

Здесь все достаточно просто. Human является именем класса, $words представляет собой переменную (поле), ну а setWords, getWords(), sayIt(), являются методами.

Существует так называемые права доступа, в зависимости от которых методы и классы видны другим классам. Открытыми для доступа должны быть лишь некоторые возможности класса. Роль классов в ООП заключается в том, что они выполняют две функции, всегда разделенные до появления объектно-ориентированных технологий: класс — это одновременно и модуль и тип[12]. Под модулями понимаются структурные единицы, из которых состоит программа. Поскольку модуль всегда рассматривается как синтаксическая концепция, то разбиение на них влияет только на форму записи исходных кодов, не определяя их функциональность. Тип — это статистическое описание определенных динамических объектов — элементов данных, обрабатываемых в процессе выполнения программы.

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