Пространства имен (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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!