Меню
Видеоучебник

Концепция ООП. Объекты и классы

Урок 23. Основы алгоритмизации и программирования на языке Python

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

Конспект урока "Концепция ООП. Объекты и классы"

Вопросы:

·     Концепция объектно-ориентированного программирования.

·     Понятия «объекты» и «классы».

·     Объектно-ориентированный анализ.

Давайте вернёмся в недалёкое прошлое и вспомним, для чего использовались самые первые компьютеры. Их задача состояла в том, чтобы производить расчёты по заданным формулам. Такие компьютеры справлялись с обработкой небольших объёмов данных, которые для нынешнего времени могут показаться незначительными. Однако время шло, системные ресурсы компьютеров увеличивались, также усложнялись и задачи, для решения которых использовались компьютеры. Соответственно, увеличивалась и сложность программ, используемых для решения задач. У человека возникли трудности с их пониманием. Однако мы уже знаем принцип, с использованием которого в программировании решаются сложные задачи – принцип последовательного конструирования алгоритма. Он основан на другом, очень старом принципе –  «Разделяй и властвуй».

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

Поэтому в 1960-х годах был придуман новый способ организации данных. Он был взят из жизни. Так, человек воспринимает всё, что видит вокруг себя, как набор объектов. У каждого объекта при этом есть своё внутреннее устройство, некоторый набор характеристик и действий, с помощью которых объект изменяет себя и влияет на своё окружение. Чтобы не воспроизводить всю сложность объектов при решении каждой задачи, применяется приём, который называется абстракцией: некоторые свойства объектов игнорируются, а учитываются лишь те свойства, которые существенны при решении данной задачи.

При решении разных задач существенными могут быть разные свойства одного и того же объекта. Например, мы можем разделить проектирование водонапорной башни на две части: проектирование резервуара с водой и проектирование опор, на которых этот резервуар держится. При проектировании резервуара нас интересует объём воды, а при проектировании опор резервуара нас интересует уже не объём, а вес воды.

Мы разобрались с тем, что такое абстракция, но как же применить этот принцип при написании программ? Сейчас большинство программ используется для решения прикладных задач, которые весьма близки к реальной жизни. Так, программы стали представлять собой набор сущностей (объектов), которые обладают своими свойствами и поведением. При этом внутреннее устройство одного объекта скрыто от других. Программисту же остаётся описать связи между этими объектами. Модель решения задачи, описанная таким образом, называется объектной.

При построении объектной модели сперва рассматриваются объекты, которые являются элементами системы верхнего уровня. При этом определяют, что должен делать каждый из объектов, не интересуясь тем, как он это делает. Именно так и используется принцип абстракции в программировании, то есть на этом этапе нас не интересует внутреннее устройство объектов. Далее объекты системы верхнего уровня рассматриваются более детально. Мы рассматриваем их внутреннее устройство и разбираемся в том, из каких объектов они состоят. Мы определяем связи уже между этими объектами и так далее. По сути, такая пошаговая детализация объектов системы – это всё тоже метод последовательного конструирования алгоритмов, который мы рассмотрели ранее.

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

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

Вы наверняка обратили внимание на то, что уже много раз прозвучало слово «объект», но что же это такое? Объектом называется сущность, у которой есть 3 вещи: чёткие границы, состояние и поведение. При этом состояние объекта может определять его поведение. Так, например, компьютер, который выключен, не может воспроизвести видеозапись, или же уже горящая лампочка не может зажечься.

Разобравшись с тем, что такое объект, рассмотрим пример объектно-ориентированного анализа задачи. Нужно исследовать урожайность дерева, если известно, что каждый третий год у дерева отрастает новая ветка, которая способна выдерживать вес, равный пяти килограммам, и каждый год этот вес увеличивается на тридцать процентов. При этом на ветвях дерева растут фрукты со случайным весом от 200 до 500 граммов. В первый год на каждой ветви вырастает по одному фрукту, а в каждый следующий год количество фруктов на ветке увеличивается в 2 раза. Когда суммарный вес фруктов превышает вес, который может выдержать ветвь дерева, то ветвь ломается и фрукты, которые росли на ветке, приходят в негодность.

Проведём объектно-ориентированный анализ задачи. В условии задачи были упомянуты 3 типа объектов: дерево, ветви и фрукты. Из задачи понятно, что у дерева может быть много ветвей и много фруктов, однако все они обладают одними и теми же свойствами, поэтому нам незачем описывать отдельно каждую ветвь и каждый фрукт, а достаточно однажды перечислить их свойства и поведение. В объектно-ориентированном программировании для этого используются классы – множества объектов, которые имеют общую структуру и поведение. Исходя из этого определения, можно сделать вывод, что каждый объект – это экземпляр класса.

Рассмотрим классы, необходимые для решения задачи. Классы описываются в вертикальной таблице из трёх ячеек. При этом в верхней ячейке указывается название класса, в средней – его свойства, а в нижней – действия, которые может выполнять объект этого класса. Действия, которые может выполнять объект класса, называются методами.

В нашей задаче мы можем сказать, что нам точно будет достаточно всего трёх классов: «Дерево», «Ветвь» и «Фрукт». Рассмотрим их подробнее.

Начнём с класса «Дерево». У дерева при решении этой задачи нас интересует 2 свойства: его возраст и ветви. Дерево должно уметь выполнять 2 действия: расти и вычислять свою урожайность, как сумму весов фруктов на всех ветвях. Мы рассмотрели основной класс «Дерево».

В нашей задаче у дерева есть ветви. Рассмотрим класс «Ветвь». При решении задачи у ветви нас будут интересовать максимально возможный вес фруктов на ней и сами фрукты. Ветвь должна уметь расти вместе с деревом и вычислять свою урожайность, как сумму весов своих фруктов.

Теперь рассмотрим класс «Фрукт». У объекта этого класса будет всего одно существенное для задачи свойство – вес.

Рассмотрим отношения между классами. Дерево должно запрашивать данные об урожайности каждой своей ветви. Каждая же ветвь должна запрашивать веса своих фруктов.

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

Мы узнали:

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

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

·     Класс – это множество объектов с одинаковыми наборами свойств и поведением.

·     Абстракцией называется приём, при котором в описании объектов учитываются лишь те свойства, которые существенны при решении данной задачи.

0
1475

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт