Файл: Основные понятия объектно-ориентированного программирования.pdf
Добавлен: 28.03.2023
Просмотров: 122
Скачиваний: 2
Введение
Сложность, с которой должен справляться программист, лежит в самой природе вещей и явлений. Борьба со сложностью и трудоемкостью лежит в основе развития технологий программирования. Она управляет и направляет развитие языков программирования. В зависимости от используемой технологии программист может моделировать более или менее сложные процессы и явления реального мира.
Принцип управления сложными системами известен еще со времен Древнего Рима - divide et impera (разделяй и властвуй). При проектировании сложных программных систем необходимо ее разделять на все меньшие и меньшие подсистемы, каждую из которых можно создать и совершенствовать независимо. Такой процесс называется декомпозиция.
В функциональном программировании используется алгоритмическая декомпозиция. Сложные или повторяющиеся действия в программе выделяются в подпрограммы, а механизм вызова подпрограмм в языках программирования, позволяет их многократно использовать. Таким образом, программа представляет собой цепочку вызовов подпрограмм, которые поэтапно решают поставленную задачу. Этот подход подход долгое время использовался при решении небольших вычислительных задач.
Развитие компьютерной техники, усложнение потребностей человека, требуют либо решения задач предельной сложности, либо более полного решения, либо более быстрого решения в реальном времени. Необходимо более полно представлять картину моделируемого явления, более надежно контролировать процесс работы программы. Этого можно достичь, если решение задачи осуществляется в терминах наиболее близких к предметной области. Наиболее эффективные разультаты дает на сегодняшний день объектно-ориентированная декомпозиция: явление, процесс представляется в виде совокупности объектов, каждый из которых является абстракцией реальных предметов, явлений, процессов. Программа в данном случае представляет собой "жизнь" взаимодействующих между собой объектов, которые благодаря этому взаимодействию поэтапно решают поставленную задачу. Объектно-ориентированный подход позволяет решать более широкий круг задач, моделировать более сложные процессы и явления (как показывает практика из любой области человеческой деятельности.
Инструментом, который позволяет реализовать эти абстрактные объекты и их взаимодействия, является язык программирования. Также как и естественные языки, которые позволяют выражать (не слова и предложения, а) мысли, идеи, понятия, языки программирования позволяют выражать (не операторы, условные и циклические конструкции, а нечто более сложное -) объекты, их поведение и взаимодействие.
Некоторые думают, что если изучить язык программирования, то этого достаточно для того чтобы быстро решить любую задачу. К сожалению это не так. Язык - это несамодостаточная вещь, это инструмент, не более, который поможет решить задачи из какой либо предметной области. Знание языка программирования необходимо только лишь для выражения своих мыслей. Из самого языка мысли не появятся. Мысли, абстракции явлений, процессов, объектов можно создать используя технологию или точнее парадигму программирования. И лишь потом реализовать эти мысли в языке.
Тема работы: Основные понятия объектно-ориентированного программирования.
Цель работы изучить Основные понятия объектно-ориентированного программирования
Задачи работы – изучить:
Парадигму ООП
Классы в ООП
Основные понятия ООП
Глава 1. Основные определения ООП
1.1 Парадигма ООП
Технология программирования - это набор правил, приемов и методов, которые помогут программисту представить себе реальные вещи абстрактными, чтобы затем "запечателеть" их в тексте на каком-либо языке программирования. Формализовать, описать и промоделировать процессы и явления реального мира [3].
Парадигма - набор правил и принципов для анализа явления или задачи, проектирования программы и непосредственно ее реализации на языке. Парадигма - это "взгляд на мир".
Объектно-ориентированное программирование (как расшифровывается ООП) – это, прежде всего, парадигма программирования.
Парадигма программирования определяет то, как программист видит выполнение программы.
Так, для парадигмы ООП характерно, что программист рассматривает программу в виде набора взаимодействующих объектов, в то время как, например, в функциональном программировании программа представляется в виде последовательности вычисления функций. Процедурное программирование или, как его еще правильно называют, классическое операциональное, подразумевает написание алгоритма для решения задачи; при этом ожидаемые свойства конечного результата не описываются и не указываются. Структурное программирование в основном придерживается тех же принципов, что и процедурное, лишь немного дополняя их полезными приемами.
Парадигмы непроцедурного программирования, к которым можно отнести объектно-ориентированную парадигму, имеют совершенно другие идеи.
Парадигма – подход к проектированию программ; взгляд на саму структуру программы; стиль написания программ; «описание намерений программиста»; способ мышления о программе; вычислительная модель. Парадигма программирования определяет, как компьютер организует вычисления при исполнении программы.
Объектно-ориентированное программирование – не единственная парадигма. Существуют, например, процедурная, структурная, аспектно-ориентированная, объектно-ориентированная; метапрограммирование; функциональная, логическая и др. По мере развития программист учится работать с разными парадигмами, расширяет кругозор.
Объектно-ориентированная (ОО) парадигма возникла из первоначальной концепции нового подхода к программированию, в то время как интерес к методам проектирования и анализа возник гораздо позже. Парадигма ОО-анализа и проектирования является логическим результатом широкого принятия языков ОО-программирования.
Первым объектно-ориентированным языком был Simula (Симуляция реальных систем), который был разработан в 1960 году исследователями из Норвежского вычислительного центра.
В 1970 году Алан Кей и его исследовательская группа в Xerox PARC создали персональный компьютер по имени Dynabook и первый чистый объектно-ориентированный язык программирования (OOPL) – Smalltalk, для программирования Dynabook.
В 1980-х Грэди Буч опубликовал статью под названием «Объектно-ориентированный дизайн», в которой в основном представлен дизайн для языка программирования Ada. В последующих изданиях он расширил свои идеи до полного метода объектно-ориентированного проектирования.
В 1990-х годах Коад включил идеи поведения в объектно-ориентированные методы.
Первым объектно-ориентированным языком был Simula (Симуляция реальных систем), который был разработан в 1960 году исследователями из Норвежского вычислительного центра.
В 1970 году Алан Кей и его исследовательская группа в Xerox PARC создали персональный компьютер по имени Dynabook и первый чистый объектно-ориентированный язык программирования (OOPL) – Smalltalk, для программирования Dynabook.
В 1980-х Грэди Буч опубликовал статью под названием «Объектно-ориентированный дизайн», в которой в основном представлен дизайн для языка программирования Ada. В последующих изданиях он расширил свои идеи до полного метода объектно-ориентированного проектирования.
В 1990-х годах Коад включил идеи поведения в объектно-ориентированные методы.
Другими значительными нововведениями стали «Методы объектного моделирования» (OMT) Джеймса Рам Боуг и «Объектно-ориентированная программная инженерия» (OOSE) Ивара Якобсона .
Парадигма ОПП лежит в основе многих мейнстримовых языков. ОО-языки: C++, С#, Java, JavaScript, Objective-C, Python, PHP, Perl, Ruby, Scala, Swift и др. То есть топовые языки, ряд языков общего назначения, языки для Android-, веб- и iOS-разработки. Популярные современные языки – мультипарадигмальные, по принципам ООП можно писать и на языках с другими парадигмами.
ООП как стиль написания программ подразумевает построение структуры, состоящей из взаимодействующих объектов. В рамках ООП нужно мыслить объектами. Объекты расположены в иерархии, самостоятельны и как-то взаимодействуют. Программа состоит из модулей – блоков, которые решают какие-то задачи. Изменения в этих участках могут не отражаться на других участках.
Определение звучит так. Объектно-ориентированное программирование – это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
Определение Гради Буча гласит: “Объектно-ориентированное программирование – это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости”.
Буч отметил также ряд преимуществ ООП.
• Объектная декомпозиция дает возможность создавать программные системы меньшего размера путем использования общих механизмов, обеспечивающих необходимую экономию выразительных средств. Использование ООП существенно повышает уровень унификации разработки и пригодность для повторного использования не только программного обеспечения, но и проектов, что, в конце концов, ведет к сборочному созданию. Системы зачастую получаются более компактными, чем их не объектно-ориентированные эквиваленты, что означает не только уменьшение объема программного кода, но и удешевление проекта за счет использования предыдущих разработок.
• Объектная декомпозиция уменьшает риск создания сложных программных систем, так как она предполагает эволюционный путь развития системы на базе относительно небольших подсистем. Процесс интеграции системы растягивается на все время разработки, а не превращается в единовременное событие.
• Объектная модель вполне естественна, поскольку в первую очередь ориентирована на человеческое восприятие мира, а не на компьютерную реализацию.
• Объектная модель позволяет в полной мере использовать выразительные возможности объектных и объектно-ориентированных языков программирования.
По сути, все современные приложения являются объектно- ориентированными, а некоторые языки программирования (например, Java) предполагают использование объектно-ориентированных структур. В соответствии с объектно-ориентированной парадигмой все приложения делятся на элементы кода (объекты), относительно независимые друг от друга. Готовое приложение можно затем создать, сложив эти объекты вместе. При этом программные объекты выполняются случайным, непредсказуемым образом, и программа не завершается до тех пор, пока пользователь не прекратит ее выполнение [4].
Структурное и объектно-ориентированное программирование строятся на таком научном методе как декомпозиция — метод, который использует структуру задачи и позволяет разбить решение общей большой задачи на решение последовательности меньших задач. Декомпозиция ООП происходит не по алгоритмам, а по объектам, использующимся при решении задачи. Данная декомпозиция уменьшает размер программных систем благодаря повторному использованию общих механизмов. Известно, что системы визуального программирования или системы, построенные на принципах объектно-ориентированного программирования, являются более гибкими и легче эволюционируют со временем [6].
1.2 Классы и методы
Класс – это описание объектов, представителей класса: отличительные признаки, состояния, взаимодействия. Что это, из чего это состоит, что можно с этим делать и как именно? У классов и объектов есть атрибуты, данные (Data) и методы, то есть функции для управления данными.
Намереваясь решить какую-то задачу, программист строит из модулей абстрактных объектов архитектуру исходного кода, в которой есть иерархия.
Иерархия: модули классов; базовый класс (класс описывает свойства объектов, содержит множество объектов, подклассов), производный класс (наследует свойства родительского класса и тоже содержит объекты); отдельно взятый объект (данные/Data, описывающие свойства объекта, + методы, то есть функции для работы с объектом, алгоритмы управления, действия, которые выполняет объект).
Методами в ООП называют функции для работы с объектами (что и как с этим делать, как и с чем это взаимодействует). Методы могут быть доступны другим классам и управлять их действиями, а могут быть действительны только внутри класса.
Совокупность тех методов класса, которые доступны и другим классам, называются интерфейсом. Чтобы тренировать объектное мышление, можно проводить аналогии с работой физических объектов и систем (с приборной доской в самолете, с пультом управления, с домофоном или лифтом в многоквартирном доме). Методы могут быть публичными и инкапсулированными, то есть скрытыми. По аналогии: панель управления в машине – на виду (интерфейс класса), а детали под капотом работают скрыто (так называемый «черный ящик»).