Учебные материалы по математике | Программирование и алгоритмические языки | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Программирование и алгоритмические языки


Программирование и алгоритмические языки

(Объектно-ориентированное программирование)

в интегрированной среде разработки MS Visual С#

Казань 2014

© Лекции читал: Н. Р.Бухараев

Набрала: Семенычева Мария (гр. 921п)

КАЗАНСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

Институт вычислительной математики и информационных технологий

Программирование и алгоритмические языки.

Курс за третий семестр.

Основной принцип программиста:

Не трогай того, что работает,

пока оно работает 🙂

Введение в объектно-ориентированное программирование (ООП)

Задача программирования — задача моделирования некоторой предметной области.

Моделирование

Статика Динамика

(описывается с помощью (описывается с помощью

понятия СОСТОЯНИЯ понятия ПРОЦЕДУРЫ

(т. е. оператора)) (т. е. определения оператора))

Специфика компьютерного программирования:

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

Описание данных

Описание преобразований

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

Т. е. нужно зафиксировать тот факт, что определение как данных, так и функций – входные ДАННЫЕ для компьютера (для этой универсальной функции).

В конце второго семестра мы узнали, что ссылки — это АДРЕСА (индексы), т. е. есть какие-то id-шники (натуральные числа, двоичные коды и т. д.). Хочется отметить, что не только имена данных, но и имена функций – АДРЕСА. Другими словами, не только определение данных и преобразований, но и любые имена (констант, типов и т. д.) имеют некий аналог в памяти (адрес).

Идеологический обзор

Логика и реализация — Сцилла и Харибда программирования.

Источники:

Математика— типизация переменных и функций, понятие модели АТД.

Естествознание и инженерия— понятие моделирования.

Процедурное программирование— использование типов при определении алгоритмов.

Структурное программирование— определение операторов.

Модульное программирование— проектирование типов (определение сложных типов)

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

Мнемокод – не типизированные ссылки на любые определения данных и подпрограмм.

Базовые принципы ООП

Основные принципы ООП:

-Инкапсуляция:

— private

— public

-Наследование

-Полиморфизм

Новизна данных понятий:

1) инкапсуляция — практически ничего нового в плане семантики (за исключением синтаксиса, структурных отличий)

2) наследование — 20%

3) полиморфизм — 40%

В этом понятии скрыта идея чёрного и серого ящиков. Строение интересует настолько, насколько оно определяет поведение. Это нужно для того, чтобы скрыть сложность реализации.

Принцип инкапсуляции не является программистским, а является общеметодическим (функциональным, бихевиористским). Его сформулировал Норберт Винер.

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

Классический тезис – строение определяет поведение

Кибернетический тезис — нас интересует строение лишь постольку, насколько оно определяет данное поведение.

Таким образом, мы не претендуем на истинное описание строения.

Между ними появляется понятие контактной зоны, пограничной зоны (интерфейса).

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

Замечание: понятие интерфейса мы относим к логике, нежели к реализации (т. е. лежит между этими понятиями).

Мы видели воплощение этой идеи в процедурном программировании (область действия имён — глобальные, локальные имена)

Вспомним определение процедуры:

Есть имена параметров, которые являются частью интерфейса. Вне этого есть глобальные переменные (теоретические, базовые) и локальные переменные. Понятно, что локальные скрыты извне (т. е. к ним нет доступа). В этом заключается понятие области действия имени.

Мы видели воплощение этой идеи в модульном программировании:

В модуле явно выделяется интерфейс (interface) и реализация (implementation).

В interface у нас имена процедур и функций, а в implementation –их реализация. Для реализации процедур и функций мы можем использовать другие имена и функции, но всё, что находится в implementation скрыто (или приватно в терминах ООП).

Замечание:

Приватный (private) – частный, личный.

Публичный (public)- общедоступный.

Существует один недочёт:

-Что касается имён функций и процедур, то мы писали в implementation заголовки и реализацию (т. е. тело процедуры).

-Что касается данных, то в них есть имена, и они тоже как-то реализуются

Например,

x: array I of T, где имя данных — x, а реализация — массив.

Кривизна заключается в том, что в публичных именах данных имена и реализация открыты (т. е. public).

Проблема заключается в:

(рассмотрим наглядный пример)

Модуль пишет высококвалифицированный программист. Он говорит, что где-то он описал модуль, некий тип данных (например, под названием арифметика рациональных чисел) и восклицает: «Пользуйтесь!». Но мы понимаем, что арифметика рациональных чисел подразумевает сложение, умножение, что этими функциями можно пользоваться.

Можно ли пользоваться тем, что рациональные числа реализованы в массиве?

Теоретически можно, т. к. он открыт. Мы имеем право написать обращение к массиву и т. д. Но всё-таки нужно отметить, что это нарушает зависимость между логикой и реализацией. Т. е. если код будет совершенствоваться добавлением новых функций, то можно и данные по-другому определить (был массив, а стал списком или чем-то другим). Понятно, что в итоге все программы, у которых uses… и которые используют тот факт, что рациональные числа — массив, «посыпятся».

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

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

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

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

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

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

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

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020