Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.
Вы уже знаете о суперспособностях современного учителя?
Тратить минимум сил на подготовку и проведение уроков.
Быстро и объективно проверять знания учащихся.
Сделать изучение нового материала максимально понятным.
Избавить себя от подбора заданий и их проверки после уроков.
Просмотр содержимого документа
«Класссы.инкапсуляция. наследование»
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ
ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ
ИМЕНИ М. Е. ЕВСЕВЬЕВА»
Факультет физико– математический
Кафедра информатики и вычислительной техники
РЕФЕРАТ
КЛАССЫ. ИНКАПСУЛЯЦИЯ. НАСЛЕДОВАНИЕ
Автор работы____________________________________________ Направления подготовки 44.03.05 Педагогическое образование
Профиль Математика. Информатика
Руководитель работы: канд. физико – матем. наук, доцент___________________________________________ Т. В. Кормилицына
Оценка __________
Саранск 2021
Содержание
Введение 3
Объектно–ориентированное программирование 5
Классы 9
Инкапсуляция 12
Наследование 13
Заключение 15
Список источников 17
Введение
Исторически сложилось так, что программирование возникло и развивалось как процедурное программирование, которое предполагает, что основой программы является алгоритм, процедура обработки данных. Объектно-ориентированное программирование - это методика разработки программ, в основе которой лежит понятие объекта как некоторой структуры, описывающей объект реального мира, его поведение. Задача, решаемая с использованием методики объектно-ориентированного программирования, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними. Другими словами можно сказать, что объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение. Оно является естественной эволюцией более ранних нововведений в разработке языков программирования. Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.
Использование объектно-ориентированного программирования является хорошим решением при разработке крупных программных проектов. Одним из наибольших преимуществ объектно-ориентированного программирования является возможность многократного использования программного кода. Если вы, к примеру, создали класс, то можете порождать от него новые классы и изменять их свойства и функциональное назначение.
Объектно-ориентированный язык программирования должен обладать следующими свойствами:
абстракции
инкапсуляции
наследования
полиморфизма
Разработка объектно-ориентированных программ состоит из следующих последовательных работ:
определение основных объектов, необходимых для решения данной задачи;
определение закрытых данных (данных состояния) для выбранных объектов;
определение второстепенных объектов и их закрытых данных;
определение иерархической системы классов, представляющих выбранные объекты;
определение ключевых сообщений, которые должны обрабатывать объекты каждого класса;
разработка последовательности выражений, которые позволяют решить поставленную задачу;
разработка методов, обрабатывающих каждое сообщение;
очистка проекта, то есть устранение всех вспомогательных промежуточных материалов, использовавшихся при проектировании;
кодирование, отладка, компоновка и тестирование.
Объектно-ориентированное программирование позволяет программисту моделировать объекты определённой предметной области путем программирования их содержания и поведения в пределах класса. Конструкция «класс» обеспечивает механизм инкапсуляции для реализации абстрактных типов данных. Инкапсуляция как бы скрывает и подробности внутренней реализации типов, и внешние операции и функции, допустимые для выполнения над объектами этого типа.
Объектно–ориентированное программирование
Элементы объектно-ориентированного программирования (ООП) появились в начале 70-х годов в языке моделирования Симула, затем получили свое развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования.
Основная цель ООП, как и большинства других подходов к программированию - повышение эффективности разработки программ. Идеи ООП оказались плодотворными и нашли применение не только в языках программирования, но и в других областях Computer Science, например, в области разработки операционных систем.
Появление ООП было связано с тем наблюдением, что компьютерные программы представляют собой описание действий, выполняемых над различными объектами. В роли последних могут выступать, например, графические объекты, записи в базах данных или совокупности числовых значений. В традиционных методах программирования изменение данных или правил и методов обработки часто приводило к необходимости значительного изменения программы. Всякое существенное изменения программы - это большая неприятность для программиста, так как при этом увеличивается вероятность ошибок, вследствие чего возрастает время, необходимое для «доводки» программы. Использование ООП позволяет выйти из такой ситуации с минимальными потерями, сводя необходимую модификацию программы к её расширению и дополнению. Необходимо заметить, что ООП не является панацеей от всех программистских бед, но его ценность как передовой технологии программирования несомненна. Изучение идей и методов ООП может существенно упростить разработку и отладку сложных программ.
Мы уже привыкли использовать в своих программах процедуры и функции для программирования тех сложных действий по обработке данных, которые приходится выполнять многократно. Использование подпрограмм в своё время было важным шагом на пути к увеличению эффективности программирования.
Подпрограмма может иметь формальные предметы, которые при обращении к ней заменяются фактическими предметами. В этом случае есть опасность вызова подпрограммы с неправильными данными, что может привести к сбою программы и её аварийному завершению при выполнении. Поэтому естественным обобщением традиционного подхода к программированию является объединение данных и подпрограмм (процедур и функций), предназначенных для их обработки.
В центре ООП находится понятие объекта.
Объект – это сущность, экземпляр класса, которой можно посылать сообщения и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.
Объект может быть охарактеризован структурой, его состоянием, поведением и индивидуальностью. Состояние объекта определяется перечнем всех возможных (обычно статических) свойств и текущими значениями (обычно динамическими) каждого из этих свойств. Свойства объекта характеризуются значениями его параметров. Поведение объекта описывает, как объект воздействует на другие объекты или как он подвергается воздействию со стороны других объектов с точки зрения изменения его собственного состояния и состояния других объектов. Говорят также, что поведение объекта определяется его действиями. Определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию называют операцией. В объектно-ориентированных языках программирования операции называют методами.
Можно выделить пять типов операций:
конструктор, создание и инициализация объекта;
деструктор, разрушающий объект;
модификатор, изменяющий состояние объекта;
селектор для доступа к переменным объекта без их изменения;
итератор для доступа к содержанию объекта по частям в определенной последовательности.
Известна и другая классификация методов объекта, когда выделяют функции управления, реализации, доступа и вспомогательные функции.
Под индивидуальностью объекта понимают свойство объекта, позволяющее отличать этот объект от всех других объектов.
Объекты могут находиться в определенных отношениях друг к другу. Эти отношения могут быть иерархическими. Основные иерархические отношения - это отношения использования и включения. Отношение использования реализуется посылкой сообщений от объекта A к объекту B. При этом объект A может выступать в роли:
активного или воздействующего объекта, когда он воздействует на другие объекты, но сам воздействию не подвергается;
пассивного или исполняющего, когда объект подвергается воздействию, но сам на другие объекты не воздействует;
посредника, если объект и воздействует и сам подвергается воздействию.
Отношение включения имеет место, когда составной объект содержит другие объекты.
Абстрагирование – это способ выделить набор значимых характеристик объекта, исключая из рассмотрения не значимые. Соответственно, абстракция – это набор всех таких характеристик.
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.
Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс – потомком, наследником или производным классом
Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
То есть фактически речь идёт о прогрессирующей организации информации согласно первичным семантическим критериям: «важное/неважное», «ключевое/подробности», «родительское/дочернее», «единое/множественное». Прогрессирование, в частности, на последнем этапе даёт возможность перехода на следующий уровень детализации, что замыкает общий процесс.
Обычный человеческий язык в целом отражает идеологию ООП, начиная с инкапсуляции представления о предмете в виде его имени и заканчивая полиморфизмом использования слова в переносном смысле, что в итоге развивает выражение представления через имя предмета до полноценного понятия–класса.
Классы
Классы и объекты – базовые понятия объектно–ориентированного программирования. В первой главе эти понятия были рассмотрены очень кратко.
Класс – описание множества объектов, имеющих одинаковые атрибуты и поведение.
Поскольку класс определяется как описание данных вместе с множеством действий, которые выполняются над этими данными, можно дать еще одно определение класса.
Класс – абстрактный тип, на основе которого создаются объекты.
Фактически класс – образец (шаблон) для создания объектов.
Класс должен определять одну логическую сущность, т. е. содержать логически связанные данные. Например, класс, в котором хранится информация о сотруднике предприятия, и должен содержать сведения о погоде или урожае.
Описание класса включает:
имя класса;
описание атрибутов (полей);
описание методов (кода, обрабатывающего эти поля).
описание атрибутов (полей);
описание методов (кода, обрабатывающего эти поля)
Классы могут включать только методы или только поля. Полян методы называют элементами класса. Кроме того, классе может определить и ряд других элементов.
Описание класса, содержащего только поля и методы
Class ИМЯ_КЛАССА {
ОПИСАНИЕ ПОЛЕЙ
ОПИСАНИЕ МЕТОДОВ
}
Поля класса синтаксически являются переменными, а методы – функциями.
Уточненный вариант описания класса:
Class ИМЯ_КЛАССА {
//описание полей
ДОСТУП ТИП ПЕРЕМЕННАЯ_1;
ДОСТУП ТИП ПЕРЕМЕННАЯ_2;
ДОСТУП ТИП ПЕРЕМЕННАЯ_N;
// описание методов
ДОСТУП ТИП_ВОЗВР_ЗНАЧЕНИЯ ИМЯ_МЕТОД1
(ФОРМАЛЬНЫЕ ПАРАМЕТРЫ)
{ ТЕЛО МЕТОДА }
ДОСТУП_ТИП_ВОЗВР_ЗНАЧЕНИЯ ИМЯ_МЕТОД_2
(ФОРМАЛЬНЫЕ ПАРАМЕТРЫ)
{ ТЕЛО МЕТОДА}
ДОСТУП ТИП_ВОЗВР_ЗНАЧЕНИЯ ИМЯ_МЕТОД_N
(ФОРМАЛЬНЫЕ ПАРАМЕТРЫ)
{ ТЕЛО МЕТОДА}
}
Спецификатор доступа ДОСТУП определяет способ получения доступа к элементу класса.
Элементы с доступом private (принят по умолчанию) могут
Использовать только другими элементами этого же класса. Элементы с доступом public могу использоваться в любых частях программы.
Пример. Описание класса, содержащего только поля
Описать класс «Компания»
Поля касса:
Название, количество сотрудников, месячный фонд зарплаты
class Company {
public string name; //название компании
public int persons; //количество сотрудников
public int money;// месячный фонд зарплаты
}
Инкапсуляция
Инкапсуляция является важнейшим свойством объектов, на котором строится объектно-ориентированное программирование. Инкапсуляция заключается в том, что объект скрывает в себе детали, которые несущественны для использования объекта. В традиционном подходе к программированию с использованием глобальных переменных программист не был застрахован от ошибок, связанных с использованием процедур, не предназначенных для обработки данных, связанных с этими переменными. Предположим, например, что имеется «не-ООП» программа, предназначенная для начисления заработной платы сотрудникам некой организации, а в программе имеются два массива. Один массив хранит величину заработной платы, а другой - телефонные номера сотрудников (для составления отчёта для налоговой инспекции). Что произойдёт, если программист случайно перепутает эти массивы? Очевидно, для бухгалтерии начнутся тяжёлые времена. «Жёсткое» связание данных и процедур их обработки в одном объекте позволит избежать неприятностей такого рода. Инкапсуляция и является средством организации доступа к данным только через соответствующие методы.
В нашем примере описание объекта процедура инициализации Init и функции GetX и GetY уже не существуют как отдельные самостоятельные объекты. Это неотъемлемые части объектного типа Location. Если в программе имеется описание нескольких переменных указанного типа, то для каждой переменной резервируется своя собственная область памяти для хранения данных, а указатели на точки входа в процедуру и функции - общие. Вызов каждого метода возможен только с помощью составного имени, явно указывающего, для обработки каких данных предназначен данный метод.
Наследование
Наследование - это ещё одно базовое понятие объектно-ориентированного программирования. Наследование позволяет определять новые объекты, используя свойства прежних, дополняя или изменяя их. Объект-наследник получает все поля и методы «родителя», к которым он может добавить свои собственные поля и методы или заменить («перекрыть») их своими методами.
Пример описания объекта-наследника даётся ниже:
Tipe=bject(Location): Boolean;
Int(IntX, IntY: Integer);
Show;
Hide;
IsVisible: Boolean;
MoveTo(NewX, NewY: Integer);
End;
Наследником здесь является объект Point, описывающий графическую точку, а родителем - объект Location. Наследник не содержит описание полей и методов родителя. Имя последнего указывается в круглых скобках после слова object. Из методов наследника можно вызывать методы родителя. Для создания наследника не требуется иметь исходный текст объекта родителя. Объект-родитель может быть уже в составе оттранслированного модуля.
В чём привлекательность наследования? Если некий объект был уже определён и отлажен, он может быть использован и в других программах. При этом может оказаться, что новая задача отличается от предыдущей, и возникает необходимость некоторой модификации как данных, так и методов их обработки. Программисту приходится решать дилемму - создания объектов заново или использовать результаты предыдущей работы, применяя механизм наследования. Первый путь менее эффективен, так как требует дополнительных затрат времени на отладку и тестирование. Во втором случае часть этой работы оказывается выполненной, что сокращает время на разработку новой программы. Программист при этом может и не знать деталей реализации объекта- родителя.
В нашем примере к объекту, связанному с определением положения графического элемента, просто добавилось новое поле, описывающее признак видимости графической точки, и несколько новых методов, связанных с режимом отображения точки и её преобразованиями.
Заключение
От любой методики разработки программного обеспечения мы ждем, что она поможет нам в решении наших задач. Но одной из самых значительных проблем проектирования является сложность. Чем больше и сложнее программная система, тем важнее разбить ее на небольшие, четко очерченные части. Чтобы справиться со сложностью, необходимо абстрагироваться от деталей. В этом смысле классы представляют собой весьма удобный инструмент.
Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми инструментами, что позволяет абстрагироваться от деталей реализации.
Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов.
ООП дает возможность создавать расширяемые системы. Это одно из основных достоинств ООП, и именно оно отличает данный подход от традиционных методов программирования. Расширяемость означает, что существующую систему можно заставить работать с новыми компонентами, причем без внесения в нее каких–либо изменений. Компоненты могут быть добавлены на этапе исполнения программы.
Полиморфизм оказывается полезным преимущественно в следующих ситуациях.
Обработка разнородных структур данных. Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.
Изменение поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект.
Реализация работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов.
Создание "каркаса" (framework). Независимые от приложения части предметной области могут быть реализованы в виде набора универсальных классов, или каркаса (framework), и в дальнейшем расширены за счет добавления частей, специфичных для конкретного приложения.
Список источников
Асхабов, Х. И. Методические основы использования информационных технологий в диагностической деятельности педагога : монография / Х. И. Асхабов, Б. С. Садулаева, Р. С. Хатаева. — Грозный : ЧГПУ, 2019. — 132 с. — ISBN 978-5-00128-397-3. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/139413 (дата обращения: 06.12.2020). — Режим доступа: для авториз. пользователей.
Бордовский, Г. А. Технологии подготовки специалистов для инновационной деятельности в сфере образования. Методические рекомендации : методические рекомендации / Г. А. Бордовский, Н. Ф. Родионова, Е. В. Пискунова. — Санкт-Петербург : РГПУ им. А. И. Герцена, 2011. — 193 с. — ISBN 978-5-8064-1657-6. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/5608 (дата обращения: 06.12.2020). — Режим доступа: для авториз. пользователей.
Калитвин, А. С. Численные методы. Использование C++ : учебное пособие / А. С. Калитвин. — Липецк : Липецкий ГПУ, 2019. — 143 с. — ISBN 978-5-907168-67-1. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/156074 (дата обращения: 06.12.2020). — Режим доступа: для авториз. пользователей.
Миниярова, Л. В. Программирование в среде Visual Basic. Net : учебное пособие / Л. В. Миниярова, М. Р. Богданов. — Уфа : БГПУ имени М. Акмуллы, 2007. — 252 с. — ISBN 5-87978-246-8 . — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/43224 (дата обращения: 06.12.2020). — Режим доступа: для авториз. пользователей.
Технологии подготовки специалистов для инновационной деятельности в сфере образования : учебно-методическое пособие / под редакцией Г. А. Бордовского [и др.]. — Санкт-Петербург : РГПУ им. А. И. Герцена, 2011. — 194 с. — ISBN 978-5-8064-1657-6. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/49983 (дата обращения: 06.12.2020). — Режим доступа: для авториз. пользователей.