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

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

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

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

Добавлен: 02.04.2023

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

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

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

Наибольшая опасность, возникающая в связи с возможностью заражения программного обеспечения компьютерными вирусами, состоит в искажении или уничтожении жизненно важной информации.

Программные меры:

- архивирование:  копирование таблицы FAT, ежедневное ведение архивов измененных файлов. Это самый важный, основной метод защиты от вирусов.

- входной контроль:  проверка поступающих программ детекторами, обновление первых трех байтов сектора начальной загрузки на незагружаемых дискетах (для уничтожения boot-вирусов).

- профилактика:  работа с дискетами, защищенными от записи, минимизация периодов доступности дискетки для записи, раздельное хранение вновь полученных и эксплуатировавшихся ранее программ, хранение программ на "винчестере" в архивированном виде.
В процессе работы программы-фаги (например AIDSTEST , ANTIDIR , DOCTOR) "выкусывают" тело вируса и восстанавливают измененную вирусом последовательность команд. 

Организационные меры состоят в следующем: 

обучение персонала;

обеспечение физической безопасности компьютера и магнитных носителей;
выработка правил архивирования;

хранение отдельных файлов в шифрованном виде;

создание и отработка плана восстановления "винчестера".

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

3.1Особенности реализации

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

Поля данных

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

Методы

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

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, номожет дополнять их собственными либо переопределять уже имеющиеся. Большинство языковпрограммирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), но в C++ допускается множественное наследование — порождение класса от двух или болееклассов-родителей. Множественное наследование порождает целый ряд проблем, как логических, так ичисто реализацинных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-егоды появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс- это класс без полей и без реализации, включающий только заголовки методов. Если некийкласс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в негометоды. Использование интерфейсов предоставляет относительно дешёвую альтернативумножественному наследованию.


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

Инкапсуляция обеспечивается следующими средствами

Контроль доступа

Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционированияобъекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытостьпервых при доступности извне вторых. Для этого в языки вводятся специальные синтаксическиеконструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторыpublic, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступныетолько из классов потомков и скрытые, доступные только внутри класса. Конкретная номенклатурамодификаторов и их точный смысл различаются в разных языках.

Методы доступа

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

Свойства объекта

Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используютсяаналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к нимпроисходит вызов методов доступа. Таким образом, свойства можно рассматривать как «умные» поляданных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями(например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути  не более чем синтаксический сахар, поскольку никаких новых возможностей они недобавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может бытьразной. Например, в C# объявление свойства непосредственно содержит код методов доступа, которыйвызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступныхдля непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычныеметоды с некоторыми дополнительными требованиями к сигнатуре.


Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа «класс» может быть присвоен объект любого класса-потомка её класса.

3.2 Подходы к проектированию программ в целом

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

Объектно-ориентированное проектирование основывается на описании структуры и поведенияпроектируемой системы, то есть, фактически, в ответе на два основных вопроса:

Из каких частей состоит система.

В чём состоит ответственность каждой из частей.

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

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

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


3.3Объектно-ориентированные языки

Основная статья: Объектно-ориентированный язык программирования

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

Современный объектно-ориентированный язык предлагает, как правило, следующий обязательный наборсинтаксических средств:

Объявление классов с полями (данными  членами класса) и методами (функциями членами класса).

Механизм расширения класса (наследования)  порождение нового класса от существующего савтоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. 

Большинство ООП-языков поддерживают только единичное наследование.

Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычноэто модификаторы доступа к полям и методам, типа public, private, обычно также protected, иногданекоторые другие.

Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той жепеременной экземпляры различных классов.

Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. 

В некоторыхООП-языках все методы классов являются виртуальными.

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

Конструкторы, деструкторы, финализаторы.

Свойства (аксессоры).

Индексаторы.

Интерфейсы — как альтернатива множественному наследованию.

Переопределение операторов для классов.

Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств вних любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типовданных) являются объектами, любой код  методом какого-либо класса и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков  Java или Ruby. Другие языки (иногдаиспользуется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В нихсуществует возможность программировать, не обращаясь к объектным средствам. Классические примеры— C++ и Delphi Pascal.