Пространства имен (namespace) и ссылки
Современные подходы к программированию
Основные подходы:
· Модульный (имеет чётко опр-ю структуру)
· Функциональный (функции вып-т нек-е действия)
· Логический
· Объектно-ориентированный подход
· Смешанный
· Компонентно-ориентированный
· Объектный подход
Декларативный язык
(программирование представляет собой описание действий которые необходимо осуществить ):
· простота верификации и тестирования (+)
· строгость мат формализации (+)
· высокая степень абстракции (+)
· сложность реализации (-)
· необходимость мат знаний (-)
Процедурный язык
(программа представляет собой набор операторов, которые сгруппированы в отдельные блоки операторов - процедуры):
· более высокий уровень абстракции (+)
· меньшая машинная зависимость (+)
· более широкая совместимость (+)
· содержательная значимость текстов (+)
· унификация программного кода (+)
· увелич. производительности труда программистов(+)
· большие трудозатраты на обучение (-)
· меньшая эффективность программного кода (-)
Функциональный язык
(программа – функция, аргументы которой также возможно функции):
· автоматическое управление памятью (сборка мусора) (+)
· простота повторного использования кода (+)
· использование функций с параметрическими аргументами (+)
· абстрагирование от машинного представления данных (+)
· использование рекурсий (вызов самих себя) (+)
· удобство символьной обработки (+)
|
|
· нелинейная структура программы (-)
· низкая эффективность (-)
Объектно-ориентированный язык
(программа представляет описание объектов, совокупность отношений и взаимодействие между ними):
· описание любой предметной области (+)
· моделирование сложных предметных областей (+)
· событийная ориентированность (+)
· высокий уровень абстракции (+)
· повторное использование объектов (+)
· параметризация методов обработки объектов (+)
· сложность тестирования и верификации (-)
2. Основные понятия и принципы ООП
Объектно-ориентированный язык
(программа представляет описание объектов, совокупность отношений и взаимодействие между ними):
· описание любой предметной области (+)
· моделирование сложных предметных областей (+)
· событийная ориентированность (+)
· высокий уровень абстракции (+)
· повторное использование объектов (+)
· параметризация методов обработки объектов (+)
· сложность тестирования и верификации (-)
Принципы ООП:
1. Абстракция:
это выражение языка программирования, отличное от идентификаторов.
Переменная является значением абстракции.
Поведение абстракции это приложение функции к аргументу.
Моделируется при помощи лямбда- счисления
|
|
2. Наследование:
означает свойства произвольного объекта сохранять поведение базового объекта.
Моделируется наследование 2 подходами:
· Фреймовая нотация Руссополоса
· диаграмма Hasse
3. Инкапсуляция:
доступность объекта исключительно при помощи свойств и методов.
Свойства: совместное хранение данных и методов; скрытие внутренней информации об пользователе; изоляция пользователя от особенности реализации
4. Полиморфизм:
оперирование объектами не обладая точными значением их типов
3. Аспекты платформы .NET Framework
Платформа.net означает:
· Совокупность технологий, которые позволяют работать с инф. в любое время на любом устройстве
· Программы становятся услугами
· Платформа поддерживает различные языки
· Стандартная инфраструктура по разработке, использованию, хостингу и интеграции XML Web услуг
· Маркетинговая стратегия
Составляющие концепции:
· Новая идеология проектирования
· Модель поддержки жизненного цикла
· Современная, интегрированная платформа
· Современный инструментарий
1. Идеология:
· Легкость развертывания приложений в среде Интернет
· Эконом. разраб. путем испол. готовых компонентов
|
|
· Интеграция как с программными прод-ми, так и с аппаратными средствами
· Использование сервисов, кот предлагаются пользователям или приложениям
· Безопасность и удобство использования
2. Модель:
§ компонентный подход
§ универ. сист. типизации (любой тип является объектом)
§ иерархия (упорядочивание классов)
§ универсальный интерфейс
§ вариативность экземпляров прогр-го об-я
3. Платформа:
· многоязыковая поддержка
· интерапирабельность (повт-е исп-е кода) и масштабируемость
· унификация доступа к библиотекам
· соответствие современным стандартам
4. Инструментарий:
· многоязыковая среда
· создание компонентов на наиболее подходящем языке
· доступность средств данной платформы для широкого использования
· одинаковость сервисных возможностей
самостоятельность в разработке трансляторов
4. Библиотеки .NET Framework
Состоит:
1) спецификация CLS:
· совокупности правил которые любой .net язык должен выполнять
· специфицирует min требования для любых .net языков
· совместимость между языками
Система типов CTS (универсальная система типов)
1) значимые типы (численные, вещественные, символьные)
· используют стек для размещения
· уничтожаются при выходе из блока, в котором были объявлены
|
|
· передаются по значению (копирование значения)
2)ссылочные типы (классы, интерфейсы, массивы)
· не используют указатели
· сохраняются в динамической памяти
· уничтожаются сборщиком мусора
· предаются по ссылке (копируют ссылки)
.NET сборки(assemblies):
· программные компоненты – DLL и EXE файлы
· наименьшая deployment единица в CLR
· имеет уникальный номер версии
· нет конфликтов с версиями
· несколько различных версий одной сборки могут существовать и использоваться одновременно
· состоят из:
· MSIL исполнимого кода
· Метаданных
· Ресурсов
библиотека классов FCL:
· стандарт для .net приложений
· доступна везде где есть net framework
BCL:
· богатая ОО библиотека с основными классами
· коллекции ввод/вывод, работа с символами, удалённое управление, многонитевость
ADO.NET
· доступ к БД
· disconnected модель данных
· сильная поддержка XML
ASP.NET и WinForms:
потребительский интерфейс приложения – Web базированный, Windows GUI, Web услуги
5. Приложения .NET Framework
6. Свободная реализация .NET Framework
7. Основные возможности C#
Эволюция:
Начало развития в 1963г. Томпсон-язык B
1972г. Томпсон-язык С.
1984г. Язык С++
2000г. Язык С#.
Что такое С#:
· смесь С++, java, Delphi
· концепция разделения типов на ссылочные и значимые
· поддержка xml документации
Особенности программ на C#:
· Совокупность описаний (набор классов и интерфейсов)
· Классы содержат как один, так и много точек входа программы
· Программы состоят из нескольких файлов
Пространство имен может быть разнесено на несколько файлов
8. Структура программ C#
Программа на C#:
· предст. совокупность описаний классов, структур и других типов
· классы содержат метод Main () – точку входа в прогу
· приложения могут состоять из нескольких файлов
· в одном файле может быть несколько классов, структур и других типов
· классы расположены в пространстве имён
· одно namespace может располагаться в нескольких файлах
Область описания:
Объекты могут быть описаны:
· пространство имён (классы, инт., стр.,…)
· в классах
· в перечислении (const…)
Контекст. сосл-я:
§ недопустимо двухкратное описание в пред. обл.
Декларации:
· Локальные переменные (название типа и переменной)
· Классы
· константы
Константы:
· const времени компиляции
· времени исполнения readonly
Операторы:
· type of
size of
9. Синтаксис конструкций C#
Конструкции:
§ элементарные
§ составные
§ прогр-е конст. упр-я switch и case
§ усл-е
§ повт. и циклов
§ перехода break, continue, return, goto
§ + конст. управления исключениями (throw, try-catch, finally)
спец. констр. (lock – блок. объектов, cheked/uncheked, fixed)
Преимущества С#:
§ Объектная ориентированность
§ Компонентно-ориентированный
§ Безопасность
§ Унифицированная система типизации
§ Событийное ориентирование
§ Родной язык для создания приложений
§ Объединений лучших идей
Недостатки С#:
§ Сложность синтаксиса
§ Небольшое количество новых идей
§ Неполностью объясненный язык
§ Невысокая производительность
не кросс- платформенный язык
10. Документирование программ C#
11. Понятие семантики
Общие сведения:
Семантика-интерпретация абстрактного синтаксиса, выраженного в терминах той или иной математической модели.
Основные подходы:
§ Ориентированы на компиляцию (множество преобразований)
§ Ориентированы на интерпретацию (множество описаний)
Виды семантики:
§ Операционные – смысл конструкций языка в терминах переходов абстр. машины из одного состояния в другое
§ Препозиционные - смысл конструкций языка в терминах множества формул описывающих состояние объектов программы
Денотационные - … в терминах абстракции функций на состояниях программы
12. Теория вычислений Д.Скотта. Семантика C#
1969 – Д. Скотт создал для формализации на основе доменов Домен - аналог множества, моделирующий самоприменимые функции и множества.
Последовательность построения теории:
· Перечисление стандартных доменов
· Определение конечных доменов с явно перечисляемыми элементами
· Определение конструкторов
Конструкторы доменов:
§ функциональное пространство
§ Декартово произведение
§ Последовательность
§ Дизьюктивная сумма
Синтаксис подмножества языка С#:
§ формализируем синтаксис
Порядок построения семантики вычислений:
· Определение синтаксиса доменов (ide, Exp, com)
· Определение вычислительной модели
· Определение семантических функций
Определение семантических предложений
13. Понятие класса и объекта
класс - общая сущность, которая определяет как совокупность объектов
объект – представляет сущность мира
свойство – пропозициональная функция определённая на произвольном типе данных
метод– операция определённая над объектами некоторого класса
Основные работы в сфере моделирования ооп:
§ 1924 – теория простых функций
§ 1934 – лямбда – исчисление
§ 80е Скотт и Фурман – аппарат определённых дискрепций
§ 90е – схема двухуровневого моделирования объектов
Концептуализация как модель объекта:
1. модель основывается на типизированном альфа- счислении, семантика которого моделируется при помощи полных и непрерывных решёток Скотта.
2. Вводятся аппликативные структуры с приписыванием типов
3. Для формализации определений используются определённые дескрипции Скотта-Фурмана вида: I x Ф, что означает «тот единственный x для которого Ф истинно»
4. произвольный объект моделируется тройкой <концепт, индивид, состояние>
14. Классы и его элементы в C#
Класс в С#, как и в других языках программирования, — это пользовательский тип данных (user defined type, UDT), который состоит из данных (часто называемых атрибутами или свойствами) и функций для выполнения с этими данными
различных действий (эти функции обычно называются методами). Классы позволяют группировать в единое целое данные и функциональность, моделируя объекты реального мира. Именно это свойство классов и обеспечивает одно из наиболее
важных преимуществ объектно-ориентированных языков программирования.
Для классов С# можно определить любое количество конструкторов. Эти специальные методы классов позволяют создавать объекты данного класса, настраивая при этом их исходное состояние нужным вам образом. Любой класс С# автоматически снабжается конструктором по умолчанию (не принимающим никаких параметров). Этот конструктор в С# (в отличие от C++) при создании объекта автоматически присвоит всем переменным-членам класса безопасные значения по умолчанию. Кроме того, вы можете, как переопределить конструктор по умолчанию, так и создать такое количество пользовательских конструкторов (принимающих параметры), сколько вам необходимо.
Изменяемые элементы поля:
§ изменяемые элементы (поля) содержат данные для сущности класса
§ могут быть произвольного типа
§ могут иметь заданную видимость
§ при объявлении можно задавать значение
Поля- const:
являются элементами класса как и изм. поля
§ предшествует спец. слово const
§ при декларации требуется задать значение
§ нельзя изменять во время исполнения
Поля только на чтение (readonly):
§ значение задают или при декларировании или в конструкторе и дальше его уже нельзя изменить
§ предшествует спец слово readonly
§ на практике runtime константа
Методы – процедура или функция находящаяся в описании класса:
§ в C# нет глоб. функции
§ могут описываться как элементы типа (класса или структуры)
§ описывают операции для типа, в котором описаны
§ могут принимать параметры и возвращать значение
§ имеют несколько видов передаваемых параметров
§ могут иметь заданную видимость
§ могут быть статичными (не связанными с инстанцией типа)
§ имеют синтаксис близкий к С++ и Java
Конструкторы:
§ используются для создания объектов(сущности, классы)
§ служат для начального установления состояния полей объекта
§ имеют синтаксис как в С++ и Java
§ любой класс может иметь 1 или несколько конструкторов
§ для классов без описанного конструктора C# - компилятор автоматически создаёт публичный конструктор по умолчанию, без параметров
§ все неинициализированные в конструкторе поля автоматически обнуляются
§ инициализируемые поля, описанные при объявлении, поставятся вкомпилятором в начало конструктора
15. Классы и его элементы в C#
Статичные методы:
§ не связаны с сущностью класса
§ предоставляют статичную функциональность
§ имеют доступ только к статичным именам
§ можно вызвать без создания сущности типа, в кот. описаны
§ похожи на глоб. функции в С++ и Delphi
Статичные поля:
§ не связаны с сущностью класса, в кот. описаны
§ как глоб. переменные – имеется только 1 сущность на всё приложение
§ имеет доступ без создания сущности типа
Частичные типы:
§ возможность определения классов, структур и интерфейсов в нескольких файлах
§ задаётся ключевым словом partial
§ облегчение разработки и сопровождения
§ разделение кода, написанного человеком и кода написанного машиной
§ всё что вы пишите в разных частях одного типа, перед компиляцией собирается в один тип
§ логич. выводы
§ нельзя расширить уже откомпилированный тип
§ нельзя указать разные уровни доступа для разных частей одного типа
§ нельзя указать разные базовые классы
исключение составляет модификатор unsafe
16. Структуры в C#
Во многих отношениях структуры С# можно рассматривать как некую особую разновидность классов. С классами структуры роднит многое: для структур можно определять конструкторы (только принимающие параметры), структуры могут реализовывать интерфейсы, структуры могут содержать любое количество внутренних членов. Для структур С# не существует единого базового класса (тип System. Structure в С# не предусмотрен), однако косвенно все структуры являются производными от типа
ValueType. Вспомним, что основное назначение ValueType заключается в том, чтобы
обеспечить типы данных, производные от System . Object, членами для работы с эти-
ми типами данных как со структурными (value-based), когда значения передаются
как локальные копии, а не как ссылки на области в памяти.
При создании структуры для нее будет выделена память в области стека и теперь можем обращаться к каждому члену структуры, используя формат имя_структуры.имя_члена. Вполне возможно, что в реальном приложении для более удобного присвоения значений членам структуры нам придется определить
свой собственный конструктор или несколько конструкторов. В связи с этим не-
обходимо помнить, что мы не можем переопределить конструктор для структуры по умолчанию — тот конструктор, который не принимает параметров. Все
ваши конструкторы обязательно должны принимать один или несколько параметров.
17. Управление памятью в .NET Framework
В ЯП Java, Perl, C# память полностью управляется автоматически garbage collector — сборщик мусора:
§ Нет необходимости ручного освобождения памяти (+)
§ Не происходит утечка памяти (+)
§ Нет возможности повторного освобождения (+)
§ Ресурсы всегда освобождаются (+)
§ Становится больше памяти (+)
§ Некоторые ресурсы требуют ручного управления (-)
Выделение памяти в .Net:
§ Значимые типы находятся в стеке и уничтожаются при окончании работы
§ Ссылочные типы находятся в динамической памяти и уничтожаются garbage collector`Ом
Выделение динамической памяти:
§ вычисляется размер нового объекта
§ проверяется наличие свободной памяти
§ при наличии памяти вызывается конструктор для инициализации
§ если памяти нет, запускается garbage collector
18. Уничтожение объектов в C#
Финализация– для освобождения памяти:
§ Все наследники от класса object имеют метод для финализации (Finalized)
Этот метод вызывается у объектов, которые будут уничтожены при очистке памяти
§ 2 структуры для финализации:
1. очередь финализации (очередь с объектами, которые имеют метод для финализации)
2. расширенная очередь (очередь с объектами, которые не используются программой и ждут вызова метода с финализацией)
§ При очистке памяти объекты не уничтожаются немедленно, а перемещаются из 1 очереди во 2ю, в которой все объекты уничтожаются одной нитью
Деструкторы- методы, приводящие к уничтожению объектов
§ Метод Finalize() не может быть реализован явно, вместо него применяется деструктор
§ как метод класса, только ~ в начале
Оживление(resurrection)
§ во время финализации возможно оживление объекта при добавлении ссылки программы к объекту который финализирован
§ сбор мусора не очищает оживл объект, пока он не будет использован
§ не рекомендуется оживлять объекты
§ Метод GC.ReRegister For Finalize()
Интерфейс IDisposable
§ Finalize не гарантирует освобождение ресурсов, но согласно позволяет освобождать ресурсы вручную
§ Для этого описывается метод Dispose
Оператор Usingгарантирует то, что после завершения конструкции вызывается метод Dispose
Слабые ссылки:
1. применяются для записи данных, которые не критичны для работы приложения
2. эти ссылки освобождаются в первую очередь
Пулинг ресурсов – применяется для работы с ресурсами которые часто создаются и уничтожаются
19. Диаграммы UML
20. Диаграммы UML
21. Типизация
Тип – относительно устойчивая и независимая совокупность элементов, которые можно выделить во всём рассматриваемом множестве.
формирование системы типов:
§ задается множество базисных типов
§ всякий базисный тип считается типом
§ если a и b считаются типами, то функция из a в b считается типом и имеет тип a→b
В основе теории типов принцип иерархичности: производные типы содержат базисные как подмножества.
Преимущества типизации:
§ Лучшая структурированность за счет иерархичности
§ Разнородные элементы обрабатываются различным образом, однородные единообразно
§ Строгая типизация фиксирует несоответствие типов до выполнения программы гарантируя отсутствие ошибок и безопасность кода
классификация:
§ Строгая
§ Сильная
§ Слабая
§ Полиморфная
§ С контролем соответствия типов во время компиляции
С контролем соответствия типов во время выполнения
22. Система типов CTS
CTS (common type system) общая система типов
Функции:
§ Описывает типы данных и операции
§ Совместимость типов в разных ЯП
§ Имеет объектно – ориентированную направленность
Категории данных:
§ Значимые типы
§ Ссылочные типы
Управление типами в CTS:
§ Типы могут быть исполнены после инициализации
§ Над типами 2 рода преобр-й (явные/неявные)
§ Типы объединяются в совокупности (пространство имён, файлы, сборки)
§ Ссылочные типы
§ Типы значения
Упаковка(boxing)- приведения значимого типа к ссылочному
Обнуляемые типы:
§ Поддержка null – значений для значимых типов
§ Стандартизация подхода к задаче
§ Работа только с value Type типами
Чтобы определить переменную, которая может принимать ещё и null значение
23. Преобразования типов
Явные(explicit):
§ Когда преобразование к другому типу напрямую несовместимо
§ Требуют вызова, могут приводить к потере точности
§ Checked-проверка
§ long- int, ...
Неявные(implicit):
§ Когда безопасно
§ Автоматически, всегда успешно
§ int- long, float- double, long- float
Оператор перечисления:
§ Список поименованных констант
§ Описываются словом enum
§ Встроено представляется типом INT? Но может быть и другим типом
§ Сильно типизирован
Тип System.Object базовый класс для всех типов .net , при описании типа по умолчанию наследник System.Object
Важные методы:
§ equals()- сравн. объекты
§ ToString()- предст. объекта как строки
§ GetHashCode()- выч. хеш-кода
§ Finalize()- уничтожение
§ GetType()- возвращение метаданных
§ MemberwiseClone()- кодирует бинарные представления в новую переменную
§ ReferenceEquals()- сравн. 2 объекта по ссылке
Клонирование объектов:
§ Создаёт идентичные копии
§ Копируется значение всех полей
§ Типы, которые позволяют клонирование
§ Clone() копирует рекурсивно все поля
Упаковка значимых типов (преобразование значимых типов в ссылочные и наоборот) Boxing-UnBoxing.
24. Пространства имен и пакеты
Пространство имён:
§ Много общего с пространством имен в с++ и пакетами в java
§ Выполняют логическую группировку
§ Могут содержать в себе классы, структуры, интерфейсы и др. пространства имен
§ не могут содержать методов и данных
§ Позв. описывать типы с одинаковыми именами (в различных пространствах)
§ Могут располагать в одном или нескольких различных файлов
§ Используются через директиву using
§ можно и без using, но с полным именем
Пространства имен (namespace) и ссылки
§ Для проекта могут быть указаны ссылки
§ Каждая ссылка идентифицирует универсальную сборку
§ Передается c# компилятору по ссылке
§ пространства имён дают возможность сохранять именования на уровне ЯП
§ ссылки указывают на сборку для использования в проекте
25. Наследование в ООП
Принцип наследования в ооп позволяет создать класс, включающий в себя все данные и методы некоторого другого класса, и, кроме того, содержащий свои, присущие только ему данные и методы обработки. Такой подход позволяет строить целые иерархии классов, каждый следующий уровень которых отличается все большей детализацией по сравнению с предшествующими ему уровнями. Достоинства такого подхода наиболее полно проявляются при программировании достаточно сложных объектов, к которым по праву относится сама операционная система Windows.
Наследование позволяет описать сначала общий класс окна Windows, на его основе описать общий класс диалогового окна Windows, а уже на основе этого класса сформировать класс конкретного диалогового окна, используемого для реализации конкретного пользовательского интерфейса.
Наследование– свойсво произв. объекта сохранять поведение родительского
Дата добавления: 2018-04-15; просмотров: 354; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!