Проблемы множественного наследования

1. Конфликты имен между различными суперклассами.

В двух и более суперклассах определено поле или операция с одинаковым именем.

2. Повторное - класс наследует двум классам, а те в свою очередь порознь наследуют одному и тому же четвертому.

Проблемы множественного наследования - student2.ru

Ромбовидная решетка наследования.

В подклассе появятся копии полей и функций из обоих классов и потребуется явное указание происхождения каждой копии.

• Вывод – использование виртуальных базовых классов для запрещения дублирования повторяющихся структур.

20. Инкапсуляция в объектно-ориентированном программировании. Контроль доступа.

Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.

• Инкапсуляция выполняется посредством сокрытия данных.

• Абстракция и инкапсуляция дополняют друг друга.

• Абстрагирование направлено на наблюдаемое поведение объекта, а инкапсуляция занимается внутренним устройством. На практике это означает наличие у класса интерфейса и реализации.

Проблемы множественного наследования - student2.ru

• В языках программирования инкапсуля́ция имеет одно из следующих значений, либо их комбинацию:

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

• языковая конструкция, способствующая объединению данных с методами (или другими функциями), обрабатывающими эти данные.

ИНКАПСУЛЯЦИЯ — процесс отделения друг от друга эл-ов объекта, определяющего устройство и поведения. Она выполняет посредством скрытия информации. Абстракция и инкапсуляция дополняют друг друга. Абстракция направлена на наблюдаемое поведение объекта, инкапсуляция занимается его внутренним устройством.

=> наличие в классе двух частей:

1. интерфейс.

2. реализация.

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

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

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

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

Класс- абстрактный тип данных, снабженный некоторыми возможностями реализации.

Одновременно является и модулем и типом. Характеризуется атрибутами и методами.

Отношения между классами:

1. Ассоциация-

2. Агрегация

3. Композиция

• Полностью реализованный класс называется эффективным.

• Класс, который реализован лишь частично или не реализован вовсе, называется отложенным.

• Различают внутреннее представление класса (реализацию) и внешнее представление класса (интерфейс).

• Реализация класса описывает поведение класса. Она включает реализации всех операций, определенных в интерфейсе класса.

• Атрибуты класса определяют состав и структуру данных, хранимых в объектах этого класса. Каждый атрибут имеет имя и тип, определяющий, какие данные он представляет.

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

• Реализация операции в виде процедуры - метод, принадлежащий классу.

+ открытыйкласс виден для любого другого класса (public)

- закрытый не виден внешними классами и может использоваться только объектами, его содержащим (private)

# защищенный виден внутри самого класса, для потомков данного класса (protected)

~ пакетный виден для клиента класса, объявленного в том же пакете (package)

Атрибуты:

• Видимость Имя: Тип[множественность]=начальное значение {свойства}

Методы:

• Видимость Имя (список параметров):Возвращаемый Тип{свойства}

Параметры метода:

• Направление Имя: Тип = значение по умолчанию

• Если атрибут (операция) подчеркивается - его область действия является класс, иначе -

• Реализация класса описывает поведение класса. Она включает реализации всех операций, определенных в интерфейсе класса.

• Атрибуты класса определяют состав и структуру данных, хранимых в объектах этого класса. Каждый атрибут имеет имя и тип, определяющий, какие данные он представляет.

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

Специальные виды классов:

• Абстрактный класс – это класс, который не может иметь экземпляров. В них присутствуют функции члены, которые объявлены, но не определены. Эти функции определяются в наследниках, которые уточняют данную абстракцию.

• Интерфейс – это абстрактный класс, который содержит только объявление методов и статические константные поля.

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

• Конструктор - операция создания объекта и/или его инициализации;

• Деструктор - операция, освобождающая состояние объекта и/или разрушающая сам объект.

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

22. Диаграммы классов UML. Основные элементы и обозначения.

UML – это язык графического описания для объектного моделирования в области разработки программного обеспечения.

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

Диаграмма, описывающая структуру системы, демонстрирующая классы системы, их атрибуты, методы и зависимости между классами.

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

• концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;

• точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;

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

Диаграмма классов описывает статическую структуру системы, показывая её классы, их атрибуты и методы, и также взаимосвязи этих классов.

Проблемы множественного наследования - student2.ru

Отношения между классами:

Проблемы множественного наследования - student2.ru

• Ассоциация показывает структурные отношения между объектами-экземплярами класса, т.е. соединения между классами.

Когда класс участвует в ассоциации, он играет в этом отношении определенную роль.

•Мощность ассоциации бывает одного из трех типов:

-один-к-одному;

-один-ко-многим;

-многие-ко-многим

Проблемы множественного наследования - student2.ru

• Зависимость - это отношение, которое показывает, что изменение в одном классе (независимом) может влиять на другой класс (зависимый), который использует его.

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

Пунктирная стрелка зависимости направлена от клиента к поставщику.

Проблемы множественного наследования - student2.ru

• Агрегация обозначает отношения классов в иерархии «целое/часть». Говорят, что агрегация образует «part of»-иерархию классов (и объектов).

Агрегация обеспечивает возможность перемещения от целого (агрегата) к его частям (атрибутам).

Нефизическое включение – агрегация.

Проблемы множественного наследования - student2.ru

• Композиция – физическое включение.

Один класс без другого не может существовать.

Проблемы множественного наследования - student2.ru

• Реализация - это отношение между классами, в котором класс-приемник выполняет реализацию операций интерфейса класса-источника.

Класс Каталог должен реализовать интерфейс Обработчик каталога, то есть Обработчик каталога рассматривается как источник, а Каталог — как приемник.

Проблемы множественного наследования - student2.ru

• Обобщение — отношение между общей сущностью и специализированной разновидностью этой сущности.

Наследование - это отношение, при котором один класс разделяет структуру и поведение, определенные в одном другом (простое наследование) или во многих других (множественное наследование) классах.

Проблемы множественного наследования - student2.ru

23. Данные. Средства описания данных. Типизация языка.

Данные – сущности, над которыми выполняют вычисления программы и которые получаются в результате этих вычислений.

Данные: встроенные и собственные (пользовательские).

Типы данных – множество значений и операций над этими значениями.

Нетипизированные языка – языки, в которых в любые переменные можно записывать любые значения в любом месте программы.

Для хранения данных используются ячейки памяти. 1 ячейка = 8 бит. Для процессора минимальный объем ячейки – машинное слово. Оно зависит от разрядности процессора.

Простые типы данных:

Целочисленные типы данных. Integer. Числа со знаком представляются в виде дополнительного кода (инверсия битов и добавление 1)

Символьный тип – аналог целочисленного типа. 256 символов. Для того, чтобы сопоставить числам символы, нужно использовать таблицу кодировки.

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

Булевый тип – частный случай перечислений. 0 – «false», остальное трактуется как «true».

Подтипы – типы, значение которых ограничено некоторым диапазоном.

Вещественные числа. Существует 2 подхода кодировки: согласно 2ой арифметике и кодировка целого числа + дополнительная информация о позиции десятичного разряда.

1. Числа с фиксированной точкой. Число содержит не более заданного количества цифр N

и не более некоторого количества знаков M после запятой.

2. Числа с плавающей точкой. X * 10m, где x – мантисса, m – порядок экспоненты.

Составные типы данных:

Массив. Это тип данных, содержащий множество значений одного типа. Отдельные ячейки – элементы, порядковый номер – индекс. В памяти хранится последовательно. Основная операция – получение элемента по индексу. Основная ошибка – выход индекса за диапазон массива. Бывают одномерные и многомерные. Организация: реально двумерный массив (Паскаль) или массив массивов.

Записи. Набор данных, содержащих элементы разных типов. Элементы – поля. Доступ к полям производится путем сдвига адреса.

Строковый тип данных. Массив из целочисленных элементов. Для того, чтобы зафиксировать длину строки используют различные подходы:

1. Строка с признаком конца строки (транслятор автоматически подставляет «0»).

2. Строка со счетчиком (длина хранится в нулевом байте самой строки, массив имеет фиксированный размер).

3. Строка является указателем на строку символов в памяти.

•Типизация – позволяет устранить ошибки на момент компиляции.

<Типы данных и типизации>

Типы данных

1. Для хранения используются ячейки памяти

2. Объем одной ячейки=8бит=1байт

3. Машинное слово – минимальный для процессора объем одной ячейки.

4. Тип данных – механизм классификации данных.

Типы данных:

ü Простые ( Целочисленные, вещественные, символьные, логические, перечисления)

ü Сложные(составные) (Массивы, структуры и записи, строки, множества, кортежи, списки, классы)

Машинно-независимые – занимают определенное количество памяти. (char занимает 1 байт всегда)

Машинно-зависимые – размер занимаемых ими ячеек зависит от платформы, под которую компилируется.( int – ровно одно машинное слово. 32-битная платформа – 4 байта, 64 –битная - 8 байт)

Объекты данных

· Каждый ЯП задает три категории характеристик

1. Допустимые значения данных и способы размещения значений в памяти компьютера.

2. Допустимые операции (встроенные в язык и рукотворные то есть создаваемые программистом).

3. Операторы, управляющие последовательностью применения операций к данным.

· Элементы данных, рассматриваемые как единое целое в некий момент выполнения программы, называют объектами данных (являются контейнером хранения данных)

Атрибуты объекта данных

· Тип - задает возможные значения, применяемые операции и формат хранения данных.

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

· Значение - текущая величина объекта данных.

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

· Принадлежность - сведения о принадлежности данного объекта к другим объектам данных (ссылки на эти объекты).

· Адрес - указывают ячейку памяти под переменную.

· Время жизни - период существования объекта в программе.

· Область видимости - сегмент фрагмент программы в пределах которой доступен объект.

Система типизации данных

· Сумма правил, связанных с типами данных и их экземплярами.

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

1. Определения атрибутов переменных их связывание.

2. Определения типов данных.

3. Определения типов выражений.

4. Правила преобразования и проверки типов данных.

Реализация типов данных

1. Способ представления объекта данных этого типа в памяти компьютера( в процессе выполнения).

2. Способ представления операций, определенных для этого типа данных. Задает конкретные алгоритмы и процедуры для обработки выбранной формы размещения объектов данных в памяти.

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

•Синтаксис атрибутов типов данных определяется формой объявления типа принятой в ЯП.

•Значения представляются литералами или именованием const.

Вызов операций задается при помощи специальных символов встроенных процедур или функций.

•При этом компилятор решает две задачи:

1)Максимально эффективно разместить данные в памяти.

2)Проверить соответствие данных указанному типу.

Типизация

• Это способ защититься от использования объектов одного класса вместо другого, или по крайней мере управлять таким использованием.

24. Преобразование типов. Контроль соответствия типов данных.

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

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

При взаимных преобразованиях переменных приложения и столбцов результирующих наборов SQL Server, кодов возврата, параметров и маркеров параметров поддерживаемые преобразования типов данных определяются API базы данных.

Система типизации данных

· Сумма правил, связанных с типами данных и их экземплярами.

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

5. Определения атрибутов переменных их связывание.

6. Определения типов данных.

7. Определения типов выражений.

8. Правила преобразования и проверки типов данных.

Реализация типов данных

3. Способ представления объекта данных этого типа в памяти компьютера( в процессе выполнения).

4. Способ представления операций, определенных для этого типа данных. Задает конкретные алгоритмы и процедуры для обработки выбранной формы размещения объектов данных в памяти.

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

•Синтаксис атрибутов типов данных определяется формой объявления типа принятой в ЯП.

•Значения представляются литералами или именованием const.

Вызов операций задается при помощи специальных символов встроенных процедур или функций.

•При этом компилятор решает две задачи:

1)Максимально эффективно разместить данные в памяти.

2)Проверить соответствие данных указанному типу.

Связывание переменных

•Это процесс установления связи между атрибутами. Момент времени, когда эта связь устанавливается, называют временем связывания.

Связывание может происходить:

1. Во время проектирования языка.

2. При разработке компилятора.

3. При компиляции.

4. При загрузке или выполнении программы.

•Связывание типа - имя связывается с типом.

Var x: intenger; Int y;

•Связывание значения - имя связывается со значением.

Х:=15; У:=25;

•По времени различают две разновидности в период компиляции:

1)Статическое связывание- выполняется в момент компиляции.(раннее связывание, в период компиляции)

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

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

2)Динамич связывание- в период выпадения программы.(позднее связывание, в период выполнения)

•При динамическом связывании оператор объявления не содержит оператор объявления переменной не содержит имени типа.

•Тип переменной определяется при присвоении ей значения оператором присвоения.

•Любой переменной может быть присвоено значение любого типа.

•Во время выполнения программы тип переменной может меняться многократно.

•Важно понимать, что тип у переменной с динамически связанными типами имеет лишь временный характер.

+Повышенная гибкость программирования.

-Снижает надежность программ (из за сложности обнаружения ошибок).

-Высокая стоимость реализации.

-Программы работают дольше(используются интерпретаторы).

Используется в Python, Ruby, Javascript, php.

Наши рекомендации