Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Н.Р. Бухараев (3 семестр)(ООП в интегрированной...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.41 Mб
Скачать

Наследование имён. Наследование значений.

Тип наследования имён - самый простой тип наследования.

Семантика модулей:

Все имена описанные в uses доступны в D так, если бы они были описаны в D. Когда мы ссылаемся на модуль, мы получаем возможность использования тех публичных имён, которые там написаны.

Это и есть наследование имён в том смысле, что к определяемым именам добавляются определения новых имён.

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

Коллизия

Коллизия подразумевает то, что одно и то же имя определяется по-разному.

С помощью квалифицированных имён можно избавиться от коллизии.

Если имя неквалифицированное (просто f), то имеется в виду ближайшее определение процедуры.

Вспомним понятие области действия:

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

Если нужно указать определённую функцию из какого-нибудь модуля, нужно осуществить указание на тот модуль, где находится данная функция.

Например, М.f, где М- название модуля, а f- функция.

Замечание: можно ли определять одинаковые имена на одном уровне в одном модуле?

-В процедурном программировании это было категорически запрещено.

-В модульном программировании чуть-чуть иначе.

Что такое имя процедуры?

а) A*B R*R->R (функция от двух переменных) , где R –вещественные числа

(1 аргумент = вещественный)*(2 аргумент = вещественный)->(результат =вещественный))

n

б) П ai R*->R, где R*- последовательность

i=1

((1 аргумент =последовательность)->(результат =вещественный))

а) и б)- две разные функции, т.к. у них разные типы

Соглашение:

Можно использовать одинаковые имена процедур и функций на одном уровне, если у них разный список параметров.

Итак:

-имена функций являются одинаковыми, если у них заголовки в точности идентичны;

-если имя функций одно, а параметры разные, то эти функции считаются разными;

Это по-другому называется override – перегрузка (переопределение).

Override - добавление новых имён с учётом регулировки коллизий и синтаксических соглашений.

Тот же вид наследования возможен и в ООП, но наследование здесь не множественное, не кратное. Иначе говоря, каждый тип или класс может ссылаться лишь на одного предка.

Это не отражает всю сложность реальности.

Тип данных -> Модуль-> Класс

Ооп как оперирование типами

В объектно-ориентированном программировании типы рассматриваются как значения.

Структура модульного программирования - произвольный граф без циклов.

Структура ООП - дерево.

Манипуляция над типами производится при помощи именования типов.

Заметим, что:

-В процедурном программировании понятие типа сильно ориентировано на значения. Классификация типов производится по области значений и именуются области значений, а не var.

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

Замечание:

Модуль можно трактовать как определение нескольких типов. Можно сказать, что модуль- библиотека, т.е. произвольный набор определённых значений и преобразований.

- В объектно-ориентированном программировании типы рассматриваются как

значения.

Краткий синтаксис языка C#

Using System;

Namespace [имя_приложения]

{

// описание тех классов, которые используем

Class [имя класса]

{

}

Class Program

{

// основная программа- запускалка

static void Main()

}

}

System - стандартная библиотека- ввод-вывод, базовые классы.

Директива Using позволяет обращаться к членам пространства имён напрямую (без использования полного имени).

Замечание: при необходимости можно подключить другие библиотеки

Как мы знаем, каждое приложение должно начинаться с какого-то оператора. Несмотря на то, что в приложении может быть много классов, точка входа всегда одна. В C# при запуске приложения начинает выполняться метод Main.

Namespace - логически связанное определение имён. Пространства имён (Namespace) предоставляют возможность логичной взаимосвязи классов и других типов.