Шпоры ООП done

advertisement
Оглавление
1.Жизненный цикл программного обеспечения. Чем занимается ООП. ............................................... 2
2. Стили программирования. Процедурный стиль. ................................................................................. 3
3. Стили программирования. Структурный стиль. .................................................................................. 3
4. Стили программирования. Объектно-ориентированный стиль. ......................................................... 3
5. Что такое ООП. Определение. Определение класса. Определение объекта. Что такое суперкласс
(метакласс). .................................................................................................................................................. 4
6. Чем характеризуется объект. Что такое СОСТОЯНИЕ объекта и чем оно характеризуется. ......... 4
7. Чем характеризуется объект. Что такое ПОВЕДЕНИЕ объекта и чем оно характеризуется. ......... 5
8. Использование технологии клиент-сервер. Способы обеспечения видимости сервера клиентом. 5
9. Определение области видимости операций и атрибутов класса. ....................................................... 6
10. Абстрагирование. Подходы классификации. ..................................................................................... 6
11. Методы выявления классов. ................................................................................................................. 7
12. Инкапсуляция. Что это такое. .............................................................................................................. 8
13. Наследование. Определение. Что такое множественное наследование. Пример наследования. .. 8
14. Полиморфизм. Определение. Пример. ................................................................................................ 9
16. Статические, абстрактные и перегружаемые методы. Что это такое. Пример. ............................. 9
17. Динамические и виртуальные методы. Что это такое. ....................................................................11
18. Критерии проверки правильности построения класса. ...................................................................12
19. Обработка исключительных ситуаций. .............................................................................................12
21. Технология COM. Понятие интерфейса. ..........................................................................................14
22. COM-сервер. Определение. Типы COM-серверов. ..........................................................................16
23. Модели STA и MTA. Преимущества и недостатки каждой модели. .............................................16
24. Компонент CLR. ..................................................................................................................................17
25. Промежуточный язык MSIL. ..............................................................................................................17
26. Выполнение .NET программы. ..........................................................................................................18
27. Понятие сборки. GAC. ........................................................................................................................19
ТУТ БУДУТ ФУЛ ЛЕКЦИИ, НА ВСЯКИЙ СЛУЧАЙ, КТО ЗНАЕТ ЧО БУДЕТ НА ЭТОМ
ХРЕНОВОМ ЭКЗАМЕНЕ %) ..................................................................................................................19
1.Жизненный цикл программного обеспечения. Чем занимается ООП.
Причины неудач программных проектов:
-нечеткая формулировка требований к ПО со стороны заказчика
-частая смена требований со стороны заказчика
-недостаток финансовых и (или) временных ресурсов
-недостаток квалифицированного персонала
-использование несовершенных технологий
V Старт проекта
| Обследование системы
| Планирование
| Системный анализ
| Системное проектирование
| Программное проектирование
| Кодирование, тестирование, отладка
| Системное документирование
| Внедрение
| Сопровождение
V Завершение проекта.
1.Обследование системы – рассматривает поставленная задача, принимается решение
«будет ли данная задача решаться?», если «да», грубо оцениваются сроки и стоимость
выполнения задачи.
2.Планирование – на этапе планирования осуществляется детальная проработка задачи,
на основе которой, формируется предварительное техническое задание на программный
проект.
3.Системный анализ - на этапе системного анализа анализируется предпочтения
заказчика, или область в которой будет разрабатываться ПО, а затем описывается задача в
терминах данной предметной области с целью последующего проектирования
архитектуры программного продукта.
4.Системное проектирование – создается архитектура программного проекта.
5.Программное проектирование – необходимо для создания структуры, описывающей
объекты, входящие в состав каждого компонента.
6.Тестирование
7.Системное документирование – создается эксплуатационная и проектная документация
к программному продукту.
Внедрение – установка ПО на аппаратную базу заказчика, обучение персонала
Сопровождение – исправление ошибок в программном продукте не выявленных на этапе
тестирования. Выпуск исправлений. Консультация пользователя системы.
2. Стили программирования. Процедурный стиль.
Процедурно-ориентированный стиль - является исторически первым и основан на
алгоритмической декомпозиции задачи.
Процедурная абстракция и метод построения программы, сверху вниз.
Данный стиль не может быть использован для создания программных продуктов
имеющих высокий уровень сложности.
Критичность и масштабность программных проектов.
Уровень критичности: ошибка ПО вызывают
1. Ошибки в программном обеспечении несут неудобства в работе.(А)
2. Ошибки в программном обеспечении вызывают потерю восполнимых
ресурсов.(С)
3. Ошибки в программном обеспечении вызывают потерю не восполнимых
ресурсов.(D)
4. Ошибки в программном обеспечении влекут угрозу человеческой жизни.(L)
Масштабность:
Малый: 1-6 человек.
Средний: 7-20 человек
Высокий: >20 человек
3. Стили программирования. Структурный стиль.
Структурно-ориентированный стиль - основан на структурной декомпозиции
задачи, абстракции типа данных и структурном построении программы, как организации
образования входных данных в выходные.
4. Стили программирования. Объектно-ориентированный стиль.
Объектно-ориентированный подход - Базируется на декомпозиции задачи с точки
зрения классов и объектов, имитируя сущности реального мира. Подходит для решения
задач любого уровня сложности и масштабности.
НЕ ВОШЕДШИЕ СТИЛИ В ВОПРОСЫ, НО ЕСТЬ В ЛЕКЦИЯХ:
Функционально-ориентированный стиль - Основан на абстракции математической
функции и построению программ подобно математическим преобразованиям. Для систем
искусственного интеллекта.
Логико-ориентированный подход - Основан на логических догадках, является
декларативным, описательным способом решения задач, Основывается на логической
декомпозиции правил вывода решения задач и основывается на организации построения
программы как набора отношений факторов и утверждений, о предметной области.
5. Что такое ООП. Определение. Определение класса. Определение
объекта. Что такое суперкласс (метакласс).
Определение ооп можно и на ходу придумать ;)
Что может быть объектом:
 осязаемый или (и) видимый предмет;
 нечто на что направлена мысль или действие;
 нечто воспринимаемое мышлением.
Объект – это некая сущность, которая обладает состоянием, поведением и идентичностью.
Объекты имеющие одинаковое поведение и сущность образует класс. Термины объект и
экземпляр класса взаимозаменяемы.
Суперкласс – это класс, экземпляры которого суть классы.
Метакласс (абстрактный) – является суперклассом и служит родоначальником иерархии
классов.
Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает
некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что
обладает определённым поведением и способом представления. Говорят, что объект —
это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются
объекты. Обычно классы разрабатывают таким образом, чтобы их объекты
соответствовали объектам предметной области.
6. Чем характеризуется объект. Что такое СОСТОЯНИЕ объекта и чем
оно характеризуется.
Что может быть объектом:
 осязаемый или (и) видимый предмет;
 нечто на что направлена мысль или действие;
 нечто воспринимаемое мышлением.
Объект – это некая сущность, которая обладает состоянием, поведением и идентичностью.
Объекты имеющие одинаковое поведение и сущность образует класс. Термины объект и
экземпляр класса взаимозаменяемы.
Состояние объекта:
Определяется перечнем (объектно статическим) свойств с указанием допустимого
диапазона значений этих свойств.
Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат
одному или нескольким классам, которые в свою очередь определяют поведение
(являются моделью) объекта. Время с момента создания объекта (конструкция) до его
уничтожения (деструкция) называется временем жизни объекта.
7. Чем характеризуется объект. Что такое ПОВЕДЕНИЕ объекта и чем
оно характеризуется.
Что может быть объектом:
 осязаемый или (и) видимый предмет;
 нечто на что направлена мысль или действие;
 нечто воспринимаемое мышлением.
Объект – это некая сущность, которая обладает состоянием, поведением и идентичностью.
Объекты имеющие одинаковое поведение и сущность образует класс. Термины объект и
экземпляр класса взаимозаменяемы.
Поведение объекта:
Объект не существует изолированно, а подвергается воздействию или сам воздействует на
другие объекты. Таким образом, он реализует свое поведение.
Поведение – то, как объект действует и реагирует, выражается в терминах состояния
объекта и передачи сообщений.
Типы методов:
Конструктор – это метод, позволяющий создать объект и (или) его инициализировать.
Деструктор – метод, позволяющий удалить объект и (или) сбросить его состояние.
Селектор – метод, считывающий состояние объекта, без его изменения(get).
Модификатор – метод, изменяющий состояние объекта(set).
Итератор – метод, позволяет последовательно считывать и (или) изменять состояние
объекта.
Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат
одному или нескольким классам, которые в свою очередь определяют поведение
(являются моделью) объекта. Время с момента создания объекта (конструкция) до его
уничтожения (деструкция) называется временем жизни объекта.
8. Использование технологии клиент-сервер. Способы обеспечения видимости
сервера клиентом.
Способы обеспечения видимости сервера клиентом:
 Сервер глобален по отношению к клиенту.
 Сервер является частью клиента
 Сервер передается клиенту в качестве параметра.
 Сервер локально порождается клиентом.
 Сервер – это объект, который предоставляет услуги, а клиент – который
получает. Взаимодействие между клиентом и сервером осуществляется на
основе четно описанных правил, называемых протоколом. При этом сервер
берет на себя обязательства, называемые контрактными, и в случае
невозможности их выполнения, должен уведомить об этом клиента.
9. Определение области видимости операций и атрибутов класса.
--- НЕ БЫЛО В ЛЕКЦИИ, ГУГЛ:
Атрибут в объектно-ориентированном программировании — переменная, связанная
с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям
осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса,
членом которого является поле. Обычно, область доступа полей класса делают закрытой
(private), то есть доступ к ним разрешается только методам того же класса. Чтобы
предоставить пользователям класса значения его полей, используются свойства: они
позволяют классу контролировать изменение его полей, например проверять
принадлежность заданного значения диапазону допустимых значений.
Атрибут – именованное свойство класса, включающее описание множества значений.
Которые могут принимать экземпляры этого класса.
Область видимости - Описанием определяется область видимости имени. Это значит, что
имя может использоваться только в определенной части текста программы. Если имя
описано в функции (обычно его называют "локальным именем"), то область видимости
имени простирается от точки описания до конца блока, в котором появилось это описание.
Если имя не находится в описании функции или класса (его обычно называют
"глобальным именем"), то область видимости простирается от точки описания до конца
файла, в котором появилось это описание. Описание имени в блоке может скрывать
описание в объемлющем блоке или глобальное имя; т.е. имя может быть переопределено
так, что оно будет обозначать другой объект внутри блока. После выхода из блока
прежнее значение имени (если оно было) восстанавливается.
10. Абстрагирование. Подходы классификации.
Методы классификации: классический
1) Классический метод – говорит о том, что источником классов является объекты
предметной области. Классическим данный метод называется потому, что базируется на
классической теории. Кандидатами в объекты могут являться осязаемые предметы, роли.
Взаимодействие
2) Анализ поведения – акцентирует внимание, на динамическом поведении
системы, как источнике классов и объектов. В этом случае, берется отдельный объект
поведения системы, а затем данное поведение анализируется, для того, чтобы выявить его
ключевые данные моменты могут служить источником классов и объектов.
3) Анализ предметной области – осуществляется группой экспертом (будущих
пользователей, специалистов предметной области, системных аналитиков). На основании
своего опыта, они описывают будущую задачу, выявляют информацию, которая должна
храниться, описывают роли пользователей системы, а так же возможные алгоритмы их
действий. Всё это служит основой для классов и объектов системы.
4) Неформальное описание – задача описывается на естественном языке, а затем
подчеркиваются существительные и глаголы.
5)Анализ вариантов: предполагает изучение аспектов поведения системы в
зависимости от внешних условий, в частности внешними условиями могут являться
данные, которые поступают на вход системы. В зависимости от потока данных.
Задействуется определённая ветка сценария поведения системы. Каждая из ветвей
анализируется с использованием метода анализа поведения. Анализ Вариантов можно
применять ТОЛЬКО вместе с методом анализа поведения.
6) Структурный анализ – ортогонален ООП и используется в тех случаях, когда для
ОО системы требуется построить структуру данных(БД).
7)CRC – карточки.
11. Методы выявления классов.
http://www.helloworld.ru/texts/comp/other/oop/ch06.htm
Выявление классов и объектов
Цель. Цель выявления классов и объектов состоит в том, чтобы найти границы
предметной области. Кроме того, эта деятельность является первым шагом в
продумывании объектно-ориентированной декомпозиции разрабатываемой системы.
Мы применяем этот шаг в анализе, когда обнаруживаем абстракции, составляющие
словарь предметной области и ограничиваем нашу задачу, решая, что важно, а что - нет.
Такие действия необходимы при проектировании, когда мы изобретаем новые абстракции,
которые являются составными частями решения. Переходя к программной реализации,
мы применяем процедуру выявления, чтобы изобрести простые абстракции, из которых
строятся более сложные, и обнаружить общие черты существующих абстракций, дабы
упростить архитектуру системы.
Результаты. Главным результатом этого шага является обновляющийся по мере развития
проекта словарь данных. Вначале достаточно составить список действующих лиц,
состоящий из всех заметных классов и объектов, названых именами, отражающими их
смысл [12]. Когда словарь разрастется, можно сделать простейшую базу данных, или
более специальный инструмент проектирования, непосредственно поддерживающий
выбранный метод разработки [Формально, словарь данных объектно-ориентированной
разработки должен содержать спецификации каждого элемента архитектуры]. В своих
более формальных разновидностях словарь данных служит предметным указателем для
всех остальных компонентов проекта, включая диаграммы и спецификации обозначений
объектно-ориентированного проектирования.
Рис. 6-1. Микропроцесс.
Таким образом, словарь данных - центральное хранилище относящихся к системе
абстракций. Вначале допустимо держать словарь данных открытым для изменений:
некоторые персонажи могут оказаться классами, некоторые - объектами, другие атрибутами, а иные - просто синонимами других абстракций. Постепенно содержимое
словаря уточняется путем введения новых, исключения лишних и объединения схожих
абстракций.
Создание словаря данных на этом шаге дает три существенных выигрыша. Во-первых,
сама работа с ним помогает выработать общепринятую и исчерпывающую терминологию,
которой можно пользоваться на протяжении всего проекта. Во-вторых, словарь естественное оглавление ко всем материалам проекта и система точек входа для доступа к
проекту в произвольном порядке. Это особенно полезно, когда в команду принимается
новый разработчик, который должен быстро войти в курс дел. В-третьих, словарь данных
позволяет архитектору окинуть весь проект единым взглядом, что может привести к
открытию новых общностей, которые иначе могли бы быть упущены.
12. Инкапсуляция. Что это такое.
ГУГЛ(вики):
Инкапсуляция — свойство языка программирования, позволяющее объединить и защитить
данные и код в объектe и скрыть реализацию объекта от пользователя (прикладного
программиста). При этом пользователю предоставляется только спецификация (интерфейс)
объекта.


Пользователь может взаимодействовать с объектом только через этот интерфейс.
Реализуется с помощью ключевого слова: public.
Пользователь не может использовать закрытые данные и методы. Реализуется с помощью
ключевых слов: private, protected, internal.
Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного
программирования (наряду с абстракцией, полиморфизмом и наследованием).
Сокрытие реализации целесообразно применять в следующих случаях:


предельная локализация изменений при необходимости таких изменений,
прогнозируемость изменений (какие изменения в коде надо сделать для заданного
изменения функциональности) и прогнозируемость последствий изменений.
13. Наследование. Определение. Что такое множественное наследование.
Пример наследования.
Наследование – позволяет организовать механизм получения свойств и методов
класса родителя, классом потомком, при этом класс потомок может расширить или
ограничить поведение класса родителя.
2 типа: Одиночное - когда потомок наследует только один класс родителя.
Множественное – когда потомок наследует два и более классов родителей
Проблемы множественного наследования:
1)конфликт имён – заключается в том, что классы родителей могут иметь методы и
свойства с одинаковыми именами (решение: префикс).
2)Повторное наследование – заключается в том, что классы родителя могут
унаследовать свойства и методы своего предка, а потомки данных классов может не знать
какие свойства и методы наследовать ему от родителей.
Вывод: может быть использовано при построении ООП однако следует ограничить его
применение поскольку оно запутывает логику программы.
14. Полиморфизм. Определение. Пример.
Полиморфизм – присваивание действию по иерархии объектов одного класса, причем
каждый из объектов будет выполнять данное действие наиболее подходящим ему
способом. Язык программирования поддерживает полиморфизм, если классы с одинаковой
спецификацией могут иметь различную реализацию — например, реализация класса
может быть изменена в процессе наследования.
Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество
реализаций».
Полиморфизм позволяет писать более абстрактные программы и повысить
коэффициент повторного использования кода. Общие свойства объектов объединяются в
систему, которую могут называть по-разному — интерфейс, класс.
Пример(вики):
Класс геометрических фигур (эллипс, многоугольник) может иметь методы для
геометрических трансформаций (смещение, поворот, масштабирование).
15. Динамическое и статическое связывание.
Статическое – заключается в том, что при компиляции адреса вызова статических
методов, заранее известны.
Динамическое связывание- адрес метода неизвестен на этапе компиляции и определяется
только в момент вызова необходимого метода. ДС обеспечивает поддержку
полиморфизма.
--Надо бы ещё чонить тут нагуглить ;(
16. Статические, абстрактные и перегружаемые методы. Что это такое.
Пример.
ГУГЛ:
Статический метод:
Статическим называется метод, который существует в классе как в таковом, а не в
отдельных его экземплярах. Как и в случае других статических членов, главное
преимущество статических методов в том, что они расположены вне конкретных
экземпляров класса, не засоряя глобальное пространство приложения. При этом они и не
нарушают принципов ООП, поскольку ассоциированы с определенным классом.
Примером может служить API баз данных, написанный мной на С#. В моей иерархии
классов есть класс SQLServerDb. Помимо базовых операций для работы с БД (new, update,
read и delete), класс содержит метод, предназкаченный для восстановления БД. В
методеRepair не
нужно
открывать
саму
БД.
Я
использую
функцию
ODBC (SQLConfigDataSource), которая предполагает, что БД закрыта. Однако,
конструктор SQLServerDb открыл БД, указанную переданным ему именем. Поэтому здесь
очень удобно использовать статический метод. Это позволило мне поместить метод в
класс SQLServerDb, к которому он принадлежит, и даже не обращаться к конструктору
моего класса. Очевидно, выгода клиента в том, что он также не должен создавать
экземпляр класса SQLServerDb……
Дальше куча разной чуши, можно погуглить на экзамене.
Абстрактный метод:
Абстрактный метод (в Паскаль), чисто виртуальный метод (в C++), отложенный метод —
в объектно-ориентированном программировании, метод класса, реализация для которого
отсутствует. Класс, содержащий абстрактные методы, также принято
называть абстрактным (там же и пример). Абстрактные методы зачастую путают
с виртуальными. Абстрактный метод может являться виртуальным, но это вовсе не
обязательно.
Назначение абстрактных методов:
описание абстракции, которая не в более конкретизированном виде не может
быть реализована;
формальное (без реализации — есть или нет) удовлетворение требований о наличии
статических методов при обращении к ним для прохождения проверки компилятора
статической типизации, когда реализация их будет определена динамически (в процессе
работы программы).
ТАК ЖЕ ЕСЛИ ЧТО ПОГУГЛИТЬ ПРО АБСТРАКТНЫЙ КЛАСС И ОСТАЛЬНОЕ НА
ПАРЕ.
Перегрузка методов:
Перегрузка методов позволяет программистам на С# многократно использовать одни и те
же имена методов, меняя лишь передаваемые аргументы. Это очень полезно по крайней
мере в двух сценариях. Первый: вам нужно иметь единое имя метода, поведение которого
немного различается в зависимости от типа переданных аргументов. Допустим, у вас есть
класс, отвечающий за протоколирование, позволяющий вашему приложению записывать
на диск диагностическую информацию. Чтобы немного повысить гибкость класса, вы
можете создать несколько форм метода Write, определяющих тип записываемой
информации. Кроме собственно строки, подлежащей записи, метод также может
принимать строку идентификатора ресурса. Без перегрузки методов вам пришлось бы
реализовать отдельные методы наподобие WriteString и WriteFrom-Resourceld для каждой
ситуации. Однако перегрузка методов позволяет реализовать оба эти метода под именем
WriteEntry, они будут различаться лишь типом параметра:
Ну и дальше разумеется гуглить на паре %)
17. Динамические и виртуальные методы. Что это такое.
ВИКИ:
Виртуальный метод:
Виртуальный метод (виртуальная функция) — в объектно-ориентированном
программировании метод (функция) класса, который может быть переопределён
в классах-наследниках так, что конкретная реализация метода для вызова будет
определяться во время исполнения. Таким образом, программисту необязательно знать
точный тип объекта для работы с ним через виртуальные методы: достаточно лишь знать,
что объект принадлежит классу или наследнику класса, в котором метод объявлен.
Виртуальные методы — один из важнейших приёмов реализации полиморфизма. Они
позволяют создавать общий код, который может работать как с объектами базового
класса, так и с объектами любого его класса-наследника. При этом базовый класс
определяет способ работы с объектами и любые его наследники могут предоставлять
конкретную реализацию этого способа. В некоторых языках программирования, например
в Java, нет понятия виртуального метода, данное понятие следует применять лишь для
языков, в которых методы родительского класса не могут быть переопределены по
умолчанию, а только с помощью некоторых вспомогательных ключевых слов.
Базовый класс может и не предоставлять реализации виртуального метода, а только
декларировать его существование. Такие методы без реализации называются «чисто
виртуальными) или абстрактными. Класс, содержащий хотя бы один такой метод, тоже
будет абстрактным. Объект такого класса создать нельзя (в некоторых языках
допускается, но вызов абстрактного метода приведёт к ошибке). Наследники абстрактного
класса должны предоставить реализацию для всех его абстрактных методов, иначе они, в
свою очередь, будут абстрактными классами.
Для каждого класса, имеющего хотя бы один виртуальный метод, создаётся таблица
виртуальных методов. Каждый объект хранит указатель на таблицу своего класса. Для
вызова виртуального метода используется такой механизм: из объекта берётся указатель
на соответствующую таблицу виртуальных методов, а из неё, по фиксированному
смещению, — указатель на реализацию метода, используемого для данного класса. При
использовании множественного наследования или интерфейсов ситуация несколько
усложняется за счёт того, что таблица виртуальных методов становится нелинейной.
Динамический метод:
НИХРЕНА ПРО НЕГО НЕТУ, УСЕРДНО ГУГЛИТЬ НА ПАРЕ.
http://ru.wikipedia.org/wiki/Динамическое_программирование
18. Критерии проверки правильности построения класса.
1. Зацепление. Определяет степень глубины связей между классами в системе.
Систему с сильным зацеплением очень сложно воспринимать и модернизировать.
Необходимо стремиться к уменьшению.
2. Связность. Необходимо выстраивать связь между классами, на основании их
взаимодействия с точки зрения логики следует избегать связей по случайному принципу.
3. Достаточность. В классе должны присутствовать все элементы, для
обеспечения его логичного и эффективного применения.
4. Полнота. Говорит о том, что в классе должны присутствовать элементы,
обеспечивающие максимальное удобство работы с классом.
5. Примитивность. Обеспечивает наличие элементов, которые требуются для их
выполнения доступа к внутренний реализации класса, по возможности следует избегать
не примитивных элементов.
19. Обработка исключительных ситуаций.
Исключительная ситуация, - это ошибка, возникающая в ходе выполнения программы
связанная либо с некорректной реализацией программы, либо со сбоями в работе
оборудования.
Исключения – это процедура, связанная с блокированием или корректной обработкой
исключительной ситуации, в основном обрабатываются исключительные ситуации,
связанные с неверной работой программы, возникающие в ходе её выполнения.
Модель обработки исключительной ситуации:
2 модели:
неВозобновимая – при возникновении исключительной ситуации, среда выполнения
начинает сканировать стек в поисках ближайшего обработчика исключительной ситуации,
при сканирование стек разрушается, работа программы продолжается с места исключения
Возобновимая – при возникновении исключительной ситуации сохраняется копия стека,
при выше описанной ситуации, восстанавливается стек, и работа программы работает с
места последнего взаимодействия.
20. Типы многозадачности. Преимущества и недостатки.
Windows -многозадачная и многопоточная среда, с вытесняющей многозадачностью.
Виды многозадачности:
1. Кооперативная - обеспечивает выполнение нескольких процессов одновременно, но
при этом переход управления от одного процесса к другому полностью
обеспечивается программистом.
2. Вытесняющая - основана на механизме вытеснения, т.е. руководством
многозадачности занимается ОС, которая выделяет каждому процессу определенный
квант процессорного времени и устанавливает приоритет процессам. Попадая на
центральный процессор процесс выполняется а течении отведенного ему кванта, по
его истечении сохраняется состояние регистров процессора и процесс вытесняется т.е.
снимается с ЦП.
Применительно COM вытесняющая многозадачность означает, что клиент и сервер могут
оказаться в различных потоках или процессах приложения. К серверу может обращаться
множество клиентов, при чем в непредсказуемые моменты времени. Технология COM
решает эту проблему при помощи концепции комнат(apartments) в которых выполняются.
21. Технология COM. Понятие интерфейса.
Там так дохрена про это, что я тупо вставлю всё, на экзамене переписать
лучше всё, и разобрать что говорить:
Человек способен хранить в кратковременной памяти не более 10 элементов. Там где
больше 10 элементов, интерфейс воспринимается сложнее. Человек быстрее узнает что то,
чем вспоминает как оно называется.
Значительно проще выбрать что то из списка, чем набрать его имя или идентификатор.
Внимание человека прежде всего акцентируется на движущихся объектах, затем на
объектах выделенных цветом и только потом на остальных формах выделения.
Лучший способ отвлечь человека от работы, вставить в интерфейс анимированное
изображение.
Правила построения удобного интерфейса пользователя.
1. Правило доступности. Система должна быть на столько понятной, что бы пользователь
никогда раньше не видевший ее, но владеющий соответствующими навыками предметной
области и в области IT, мог начать работу с ней без подготовки.
2. Правило эффективности. Система не должна препятствовать эффективной работе
опытных пользователей. Плохое решение ориентация интерфейса только на новичка.
3. Правило непрерывного движения вперед. Система должна способствовать
непрерывному росту знаний, умений и навыков пользователя, приспосабливаясь к его
меняющемуся опыту.
Принципы построения интерфейса пользователя.
1. Принцип структуризации. Пользовательский интерфейс должен быть целесообразно
структурирован, родственные его части должны быть похожи и должны быть связаны, а
независимые не походи и разделены. Все функции, данные для выполнения определенной
задачи должны быть видны, когда пользователь пытается ее выполнить.
2. Принцип простоты. Наиболее распространенные операции должны выполнятся
максимально просто. При этом должны быть ссылки наиболее сложные процедуры.
3. Принцип обратной связи. Пользователь должен получать сообщения о действиях
системы и о важных событиях внутри нее. Сообщения должны быть краткими
однозначными, и написанными на языке понятном пользователю.
4. Принцип толерантности. Интерфейс должны быть гибким и терпимым к ошибкам
пользователя. Ущерб от ошибок должен снижаться за счет возможности отмены и повтора
действий, а так же за счет разумной интерпретации любых разумных действий и данных.
По возможности стоит избегать модального взаимодействия.
Современный компонентный подход.
Прикладные компоненты, самостоятельны блоки программного кода, которые реализуют
определенную бизнес логику, распределены по сети и могут быть использованы
многократно. На сегодняшний день существует две наиболее известные технологии:
СОМ - Component Object Model
CORBA - Common Object Request Broker Architecture
OLE - Object Linking and Embedding
Основные архитектурные принципы:
Основное назначение данных технологий - поддержка разработки и развертывание
сложных объектно-ориентированных систем. Любого отдельного взятого ООЯ
недостаточно для написания распределенных вычислительных систем. Достаточно часто
различные компоненты программного комплекса требуют реализации на разных языках,
на разных аппаратных и программных платформах. Функциями COM и CORBA являются
функции промежуточного обеспечения объектной среды.
Для обеспечения данной промежуточной среды, необходимо реализовать несколько
базовых принципов:
1. Независимость от физического размещения объекта. Компоненты программного
обеспечения не обязаны находится в одном исполняемом файле , выполнятся в рамках
одного процесса ил размещаться на одной аппаратной системе.
2. Независимость от платформы. Компоненты могут выполнятся на различных
аппаратных и операционных платформах, взаимодействую друг с другом в рамках единой
системы
3. Независимость от языка программирования. Различия в языках, которые используются
при создании компонентов не препятствует их взаимодействию друг с другом.
Технологии CORBO и COM являются клиент серверными технологиями, в которых
функциональность объекта предоставляется клиенту по средствам обращения к
абстрактным интерфейсам. Интерфейс определяет набор методов которые реализуют
функции присущие данному классу. Интерфейс дает возможность клиенту вызвать тот
или иной метод скрывая от него детали реализации. Клиент получает доступ к объекту
только путем вызова метода определенного в интерфейсе объекта. Это означает, что
реальные действия выполняются в адресном пространстве объекта, возможно удаленном
от клиента.
В обеих технологиях в основе общения между клиентом и сервером, лежит механизм
называемый RPС. Механизм RPC реализует схему передачи сообщений в соответствии с
которой в распределенном клиент серверном сообщении, процедура клиент передает
специальное сообщение с параметрами вызова по сети в удаленную серверную процедуру,
а результаты ее выполнения возвращаются в другом сообщении к клиентскому
приложению. Для того, чтобы реализовать данную процедуру общения на стороне
клиента и сервера поддерживаются спец компоненты называемые клиентский суррогат и
серверный суррога(stub).
Написание COM приложений:
Базовым понятием технологий является понятие интерфейса. Можно сказать, что
интерфейс является контрактом между программистом и компилятором. Программист
обязуется реализовать все методы описанные в интерфейсе и следовать требованиям
предъявляемым к реализации каждого из них. Компилятор обязуется создать в программе
внутренние структуры, позволяющие обращаться к методам этого интерфейса из любого
поддерживающего те же соглашения средства программирования. Описание интерфейса
включает в себя описание методов и их параметров, ноне включает их реализацию. Кроме
того, в объявлении может быть указано уникальное 16ти байтовое число сгенерированное
по специальным правилам гарантирующее его статическую уникальность(GUID).
1. Интерфейсы могут наследоваться. В плане интерфейса нужно понимать, что он не
является классом. Класс может выступать в реализации интерфейса, но класс содержит
код методов на конкретном языке, а интерфейс нет. 2. Интерфейс строго типизирован.как
клиент, так и реализация интерфейса должны использовать точно те же методы и
параметры, что указаны в описании интерфейса. 3. Интерфейс является не изменным
контрактом. Нельзя определить новую версию интерфейса с измененным набором
методов или их параметров, но с тем же самым идентификатором.
Реализация интерфейса - это код, который реализует методы. При Этом, за несколькими
исключениями, не накладывается никаких ограничений на то каким образом будет
выглядеть эта реализация. Физически, реализация представляет собой массив указателей
на методы, адрес которого и используется в клиенте для доступа к COM- объекту.
Интерфейс iUnknown.
Автоматическое управление памяти и подсчет ссылок.
Любой клиент, желающий использовать COM объект после его создания, должен
вызвать метод который увеличивает внутренний счетчик ссылок на объект на единицу. По
завершении использования объекта, клиент вызывает метод Realise, уменьшающий
значение этого счетчика на единицу. По достижения счетчиком нулевого значения, объект
автоматически удаляется из памяти. Такая модель позволяет клиентам не вдаваться в
подробности реализации объекта, а объекту обслуживать несколько клиентов и корректно
очищать память по завершению работы с ними.
В качестве выходного параметра идентификатор интерфейса. Если объект реализует
запрошенный интерфейс, то метод:
1. Возвращает ссылку на него в параметре obj.
2. Вызывает метод edref полученного интерфейса и возвращает ноль. В противном случае
возвращается код ошибки.
22. COM-сервер. Определение. Типы COM-серверов.
Это специальным образом оформленная и зарегистрированное приложение, которое
позволяет клиентам запрашивать у себя создание реализованных в нем объектов. Сервер
может быть выполнен либо в виде динамически подключаемой библиотеки, либо в виде
исполняемого файла.
Сервер в виде DLR(in-process).
Такой сервер всегда выполняется в адресном пространстве активировавшего его
приложения за счет этого снижаются накладные расходы на вызов метода с
сервера. В тоже время данный сервер менее надежный поскольку его память не защищена
от ошибок в вызывающем приложении. Кроме того, он не может выполнятся на
удаленной машине без исполнимого модуля посредника, способного создать процесс в
который может быть загружена dll.
Сервер в виде исполняемого файла.
Данный сервер представляет собой обычный исполняемый файл windows , в котором
реализована возможность создания COM объектов по запросу других приложений.
Регистрация сервера.
Технология COM обеспечивает механизм автоматического поиска сервера по запросу
клиента. Каждый COM объект имеет уникальный идентификатор - CLSID(class
identificator). Для каждого сервера прописывается информация необходимая для
нахождения и загрузки его модуля. Таким образом клиентское приложение не должно
беспокоится о поиске сервера, достаточно зарегистрировать его на компьютере и COM
автоматически найдет и загрузит нудный модуль. Кроме того, объект может
зарегистрировать свое дружественное имя(PROGID). Оно формируется из имени сервера
и из имени объекта и содержит ссылку на CLSID. Сервера в виде исполняемых файлов
регистрируются автоматически пр. Инсталляции, либо при первом запуске, сервера в виде
dll необходимо регистрировать с помощью(в консоли regsrv).COM сервера реализуются с
помощью двух моделей памяти.
23. Модели STA и MTA. Преимущества и недостатки каждой модели.
Комнаты могут быть однопоточные (STA - single threated apartments) и многопоточные
(MTA).
STA.
При создании однопоточной комнаты, COM неявно создает окно, и при вызове любого
метода COM объекта в этой комнате посылает данному окну сообщение, при помощью
функции post message. Таким образом организуется очередь вызова методов, каждая из
которых обрабатывается только после того, как будут обработаны все предшествующие
вызовы.
Основные достоинства STA:
1.Программист не заботится о синхронизации методов. Гарантируется, что до окончании
выполнения текущего метода, никакой другой метод объекта не будет вызван.
2. Программист не заботится о синхронизации доступа к полям класса.
Недостатки STA вытекают из ее реализации:
1.Дополнительные(иногда излишние) затраты на синхронизацию при вызове методов.
2.Не возможность отклика на вызов метода пока не исполнен предыдущий.
Тем не менее STA является наиболее подходящим выбором для реализации COM сервера.
MTA:
Не реализует автоматический сервис по синхронизации и не имеет его ограничения.
Внутри нее может быть создано сколько угодно потоков и объектов, при этом ни один из
объектов не привязан к какому то конкретному потоку. Это означает, что любой метод
объекта может быть вызван в любом из потоков. COM автоматически ведет пул потоков
внутри MTA при вызове со стороны клиента, находит свободный поток и в нем вызывает
метод требуемого объекта. Очевидно, что CON сервер работающий в MTA обладает
высоким быстродействием и доступностью для клиента, однако сложен в реализации.
24. Компонент CLR.
Основным компонентом данной технологии является CLR. Данный компонент
располагается над сервисами ОС. Основное назначение данного компонента выполнение
приложений, соблюдение всех программных зависимостей, управление памятью,
обеспечение безопасности, интеграция с языками программирование и тп. Разработчики
не взаимодействуют с CLR на прямую, все сервисы предоставляются унифицированной
библиотекой класса, которая располагается над CLR. Библиотека содержит более тысячи
классов, для решения разных задач. Компилируемый для CLR код называется
управляемым кодом. Управляемый код по мимо непосредственно кода программы
содержит метаданные, которые создаются в процессе компиляции и содержат
информацию о типах и ссылках используемых в коде. Метаданные используются средой
исполнения:
1. Для обнаружения классов.
2. Для загрузки классов.
3. Генерации кода для конкретной платформы.
4. Для обеспечения безопасности.
25. Промежуточный язык MSIL.
Код компилируемый технологией dotNET переводится не в машинный код для
конкретной платформы, а в код на промежуточном языке, который представляет набор
инструкций, не зависящих от конкретного процессора и конкретной ОС. Данный код
включает непосредственно выполняемый код и метаданные.
Метаданные содержат описания типов, информацию о версии, ссылки на различные
сборки и другую информацию используемую средой выполнения. В целом, метаданные
представляют собой высокоуровневый вариант библиотеки типов. Метаданные
используются самой средой выполнения, загрузчиком классов, а так же различными
утилитами.
VB -> MSIL -> машинный код -> приложение
JIT(just in time compiler).
Программа на промежуточном языке остается неизменной до тех пор, пока она не
вызывается на выполнение. В момент, когда управление передается среде исполнения,
промежуточный код преобразуется в код для конкретной платформы. Эту задачу
выполняет компилятор, называемый JIT. Теоретически, только данный компилятор
является зависящим от конкретной платформы. Однако, на самом деле, от платформы
зависит ряд классов и других компонентов. Если из NET программы напрямую
вызываются функции ОС, программа остается привязанной к конкретной платформе. JIT
не выполняет компиляцию всего кода при первом обращении к программе. При этом,
каждый метод компилируется отдельно при обращении к нему и таким образом не
используемый код не компилируется. По мимо этого существует возможность
откомпилировать весь промежуточный код, восполняемый файл для конкретной
платформы.
26. Выполнение .NET программы.
Тут хз чо писать, вставил всё:
Основная часть DotNET - NET Framework которая включает в себя: ASP NET, Библиотека
классов, Common Language Runtime.
Технология dotnet является платформой для создания и выполнения различных
приложений, реализованных на различных языках и функционирующих в рамках единой
среды выполнения. Данная технология является кроссплатформенной. Основным
компонентом данной технологии является CLR. Данный компонент располагается над
сервисами ОС. Основное назначение данного компонента выполнение приложений,
соблюдение всех программных зависимостей, управление памятью, обеспечение
безопасности, интеграция с языками программирование и тп. Разработчики не
взаимодействуют с CLR на прямую, все сервисы предоставляются унифицированной
библиотекой класса, которая располагается над CLR. Библиотека содержит более тысячи
классов, для решения разных задач. Компилируемый для CLR код называется
управляемым кодом. Управляемый код по мимо непосредственно кода программы
содержит метаданные, которые создаются в процессе компиляции и содержат
информацию о типах и ссылках используемых в коде. Метаданные используются средой
исполнения:
1. Для обнаружения классов.
2. Для загрузки классов.
3. Генерации кода для конкретной платформы.
4. Для обеспечения безопасности.
Среда выполнения так же следит за временем жизни объектов. В технологии DotNET как
и в COM есть механизм подсчета ссылок, а удаление их из памяти происходит при
помощи процедуры называемой сборкой мусора. Код компилируемый технологией
dotNET переводится не в машинный код для конкретной платформы, а в код на
промежуточном языке, который представляет набор инструкций, не зависящих от
конкретного процессора и конкретной ОС. Данный код включает непосредственно
выполняемый код и метаданные.
Метаданные содержат описания типов, информацию о версии, ссылки на различные
сборки и другую информацию используемую средой выполнения. В целом, метаданные
представляют собой высокоуровневый вариант библиотеки типов. Метаданные
используются самой средой выполнения, загрузчиком классов, а так же различными
утилитами.
JIT(just in time compiler).
Программа на промежуточном языке остается неизменной до тех пор, пока она не
вызывается на выполнение. В момент, когда управление передается среде исполнения,
промежуточный код преобразуется в код для конкретной платформы. Эту задачу
выполняет компилятор, называемый JIT. Теоретически, только данный компилятор
является зависящим от конкретной платформы. Однако, на самом деле, от платформы
зависит ряд классов и других компонентов. Если из NET программы напрямую
вызываются функции ОС, программа остается привязанной к конкретной платформе. JIT
не выполняет компиляцию всего кода при первом обращении к программе. При этом,
каждый метод компилируется отдельно при обращении к нему и таким образом не
используемый код не компилируется. По мимо этого существует возможность
откомпилировать весь промежуточный код, восполняемый файл для конкретной
платформы.
27. Понятие сборки. GAC.
Сборка - представляет собой коллекцию из одного или более файлов. Эти файлы содержат
код на промежуточном языке и различные ресурсы, необходимые для функционирования
кода, а так же ссылки на другие сборки. Сборки которые содержатся в GAC(Global
Assembly Cache) называются статическими и храняося на жеском диске. По мимо
статических сборок существуют сборки динамические. Динамические сборки создпются
во время исполнения программы и одычно не сохраняются на диске. Сборки являются
минимальной единицей внедрения контроля версий повторного использования и системы
безопасности. Каждая сборка содержит специальные метаданные называемые
манифестом.
В манифесте содержится информация о классах, типах, и ссылках на другие сборки.
Сборка используемая более чем в одном приложении сохраняется в GAC.
CTS(Common Type System)
CTS определяет типы поддерживаемые в CLR. Типы можно разделиьт на две большие
группы: данные со значениями и ссылочные типы. Данные со значениями описывают
значения, представляемые последовательностью байт. Любой тип технологии dotNET
является классом. Ссылочные типы делятся на 3 категории: обьектные типы,
интерфейсные типы, и указательные типы.
ТУТ БУДУТ ФУЛ ЛЕКЦИИ, НА ВСЯКИЙ СЛУЧАЙ, КТО ЗНАЕТ ЧО
БУДЕТ НА ЭТОМ ХРЕНОВОМ ЭКЗАМЕНЕ %)
Жизненный цикл программного обеспечения:
Причины неудач программных проектов:
-нечеткая формулировка требований к ПО со стороны заказчика
-частая смена требований со стороны заказчика
-недостаток финансовых и (или) временных ресурсов
-недостаток квалифицированного персонала
-использование несовершенных технологий
V Старт проекта
| Обследование системы
| Планирование
| Системный анализ
| Системное проектирование
| Программное проектирование
| Кодирование, тестирование, отладка
| Системное документирование
| Внедрение
| Сопровождение
V Завершение проекта.
Обследование системы – рассматривает поставленная задача, принимается
решение «будет ли данная задача решаться?», если «да», грубо оцениваются
сроки и стоимость выполнения задачи.
Планирование – на этапе планирования осуществляется детальная
проработка задачи, на основе которой, формируется предварительное
техническое задание на программный проект.
Системный анализ - на этапе системного анализа анализируется
предпочтения заказчика, или область в которой будет разрабатываться ПО, а
затем описывается задача в терминах данной предметной области с целью
последующего проектирования архитектуры программного продукта.
Системное проектирование – необходимо для создания структуры,
описывающей объекты, входящие в составе каждой из ????
Системное документирование – сопроводительное документирование к
программному продукту.
Внедрение – установка ПО на аппаратную базу заказчика, обучение
персонала
Сопровождение – исправление ошибок в программном продукте не
выявленных на этапе тестирования. Выпуск исправлений. Консультация
пользователя системы.
Классы и объекты.
Объект –
осязаемый или (и) видимый предмет;
нечто на что направлена мысль или действие;
нечто воспринимаемое мышлением.
Объект – это некая сущность, которая обладает состоянием, поведением и
идентичностью. Объекты имеющие одинаковое поведение и сущность
образует класс. Термины объект и экземпляр класса взаимозаменяемы.
Существует понятие называемое суперклассом.
Суперкласс – это класс, экземпляры которого суть классы.
Метакласс (абстрактный) – является суперклассом и служит
родоначальником иерархии классов.
Состояние объекта – определяется перечнем (обычно статических
свойств с указанием допустимого диапазона значений этих свойств).
Объект не существует изолированно, а подвергается взаимодействию
или сам воздействует на другие объекты. Таким образом, он реализует своё
поведение.
Поведение – это ???? объект действует и реагирует, поведение
выражается в переменах состояния объекта и передачей сообщений.
Типы методов:
Конструктор – это метод позволяющий создать объект и (или) его
инициализировать.
Деструктор – это метод позволяющий удалить объект и (или) сбросить
его состояние.
Селектор – метод, считывающий состояние объекта без его изменения.
(get)
Модификатор – изменяет состояние объекта. (set)
Итератор – позволяет последовательно считать и (или) изменять
состояние объекта.
Для того чтобы клиент обращался к серверу.
Способы обеспечения видимости.
Сервер глобален по отношению к клиенту.
Сервер является частью клиента
Сервер передается клиенту в качестве параметра.
Сервер локально порождается клиентом.
Сервер – это объект, который предоставляет услуги.
Клиент – тот объект, который покупает взаимодействие между к. и с.
осуществляется на основе четко описанных правил, называемых
протоколами. При этом сервер берёт на себя обязательства, которые
называются контактными и в случае невозможности их выполнения должен
уведомить об этом клиента.
Критерии выбора типов методов в классе;
Аспект расхода памяти и времени
Синхронное выполнение того или иного действия.
Синхронные.
Преимущества синхронных операций: выполнение вычислений при
готовности клиента и сервера гарантирует защиту от повреждения данных
Недостаток: в случае неправильной реализации алгоритма, данный
метод может внести сбой в работу программы системы.
Существует минимальный (Оптимальный по времени), средний,
максимальный (Оптимальный по памяти) вариант.
Критерии проверки правильности
Зацепление: определяет степень глубины связей между классами в
системе. Систему с сильным зацеплением очень сложно воспринимать и
модернизировать. Необходимо стремиться к уменьшению.
Связность: необходимо выстраивать связь между классами, на
основании их взаимодействия с точки зрения логики следует избегать связей
по случайному принципу.
Достаточность: в классе должны присутствовать все элементы, для
обеспечения его логичного и эффективного применения.
Полнота: говорит о том, что в классе должны присутствовать элементы,
обеспечивающие максимальное удобство работы с классом.
Примитивность: обеспечивает наличие элементов, которые требуются
для их выполнения доступа к внутренний реализации класса, по возможности
следует избегать не примитивных элементов.
Принципы ООП
Абстрагирование
Стили(подходы) программирования.
Процедурно-ориентированный стиль - является исторически первым и
основан на алгоритмической декомпозиции задачи.
Процедурная абстракция и метод построения программы, сверху вниз.
Данный стиль не может быть использован для создания программных
продуктов имеющих высокий уровень сложности.
__________________________________________________________________
Критичность и масштабность программных проектов.
Уровень критичности: ошибка ПО вызывают
a) Неудобство работы
c) Потерю восполнимых ресурсов.
d) Потерю невосполнимых ресурсов.
l) Угрозу человеческой жизни
Масштабность: Малый: 1-6 человек.
Средний: 7-20 человек
Должность: >20 человек
__________________________________________________________________
_
Структурно-ориентированный подход - Основан на структурной
детализации задачи, абстракции типа данных и структурном построении
программы, как организации образования входных данных в выходные.
Функционально-ориентированный стиль - Основан на абстракции
математической функции и построению программ подобно математическим
преобразованиям. Для систем искусственного интеллекта.
Логико-ориентированный подход - Основан на логических догадках,
является декларативным, описательным способом решения задач,
Основывается на логической декомпозиции правил вывода решения задач и
основывается на организации построения программы как набора отношений
факторов и утверждений, о предметной области.
Объектно-ориентированный подход - Базируется на декомпозиции
задачи с точки зрения классов и объектов, имитируя сущности реального
мира. Подходит для решения задач любого уровня.
Классическая категоризация - Основана на том, что все вещи, предметы
и т.п. обладающие данными свойствами или совокупностью свойств
образуют некоторую категорию. Причем наличие данных свойств является
необходимым и достаточным условием принадлежности к категории.
Концептуальная кластеризация - Является дальнейшим развитием
классического подхода и основывается на теории нечётных множеств.
Данная теория говорит о том, что каждый объект обладает совокупностью
свойств, значения которого можно определить, используя некий
коэффициент, и в зависимости от значений коэффициента объект
причисляется к тому или иному кластеру.
Теория прототипов - Основана на том, что выбирается один объект,
который будет выступать в качестве эталона, и в зависимости от схожести с
ним причисляется к данному классу, или нет.
Недостаток: сложность описания прототипа
_____________________________________________________________
___________
Классы анализа.
UML
Entity (Сущность) - классы сущности предназначены для
долговременного хранения информации.
Boundary (Граничный) – отвечает за взаимодействие системы с её
внешними пользователями. Пользователи: люди, программные системы,
аппаратные устройства.
Control – отвечает за взаимодействие между граничным и классом
сущности.
Методы классификации: классический
1) Классический метод – говорит о том, что источником классов
является объекты предметной области. Классическим данный метод
называется потому, что базируется на классической теории. Кандидатами в
объекты могут являться осязаемые предметы, роли.
Взаимодействие
2) Анализ поведения – акцентирует внимание, на динамическом
поведении системы, как источнике классов и объектов. В этом случае,
берется отдельный объект поведения системы, а затем данное поведение
анализируется, для того, чтобы выявить его ключевые данные моменты
могут служить источником классов и объектов.
3) Анализ предметной области – осуществляется группой экспертом
(будущих пользователей, специалистов предметной области, системных
аналитиков). На основании своего опыта, они описывают будущую задачу,
выявляют информацию, которая должна храниться, описывают роли
пользователей системы, а так же возможные алгоритмы их действий. Всё это
служит основой для классов и объектов системы.
4) Неформальное описание – задача описывается на естественном
языке, а затем подчеркиваются существительные и глаголы.
5)Анализ вариантов: предполагает изучение аспектов поведения
системы в зависимости от внешних условий, в частности внешними
условиями могут являться данные, которые поступают на вход системы. В
зависимости от потока данных. Задействуется определённая ветка сценария
поведения системы. Каждая из ветвей анализируется с использованием
метода анализа поведения. Анализ Вариантов можно применять только
вместе с методов Анализ поведения.
6) Структурный анализ – ортогонален ООП и используется в тех
случаях, когда для ОО системы требуется построить структуру данных.
7)CRC – карточки.
Наследование – позволяет организовать механизм получения свойств и
методов класса родителя, классом потомком, при этом класс потомок может
расширить или ограничить поведение класса родителя.
2 типа: Одиночное - когда потомок наследует только один класс
родителя.
Множественное – когда потомок наследует два и более классов
родителей
Проблемы множественного наследования:
1)конфликт имён – заключается в том, что классы родителей могут
иметь методы и свойства с одинаковыми именами (решение: префикс).
2)Повторное наследование – заключается в том, что классы родителя
могут унаследовать свойства и методы своего предка, а потомки данных
классов может не знать какие свойства и методы наследовать ему от
родителей.
Вывод: может быть использовано при построении ООП однако следует
ограничить его применение поскольку оно запутывает логику программы.
Полиморфизм – присваивание действию по иерархии объектов одного
класса, причем каждый из объектов будет выполнять данное действие
наиболее подходящим ему способом.
Динамическое и статическое связывание.
Статическое – заключается в том, что при компиляции адреса вызова
статических методов, заранее известны.
Динамическое связывание – при ДС адрес метода неизвестен на этапе
компиляции и определяется только в момент вызова необходимого метода.
ДС обеспечивает поддержку полиморфизма.
Безопасное программирование
Классификация ошибок в программных системах.
1)синтаксические – наиболее простой тип, связанный с неправильным или
некорректным определением языковой конструкции, выявляются на этапе
компиляции.
2)опечатки – как правило, вызваны невнимательностью при использовании
кода, в результате получается синтаксически верный, но неправильно
работающий код.
3)ошибки реализации алгоритма – под данную категорию показывают
ошибки вызванные неверным программированием, при верном алгоритме.
4)ошибка алгоритма – возникают в том случае, когда неверно составили
алгоритм, при этом данные ???? были неизбежно интерферируют с ошибками
реализации алгоритма.
5)ошибки метода – связаны с неверным описанием или оценкой погрешности
при решении той или иной задачи программирования. Ошибки метода
достаточно трудно выявляются и даже при верном алгоритме и реализации
результат недостижим.
Принцип безопасного программирования:
Безопасное программирование подразумевает, что программист должен
выступать в активной роли и блокировать возможные места появления
ошибок в программе соответствующий языковыми конструкциями.
Исключение, исключительные ситуации.
Исключительная ситуация, - это ошибка, возникающая в ходе выполнения
программы связанная либо с некорректной реализацией программы, либо со
сбоями в работе оборудования.
Исключения – это процедура, связанная с блокированием или корректной
обработкой исключительной ситуации, в основном обрабатываются
исключительные ситуации, связанные с неверной работой программы,
возникающие в ходе её выполнения.
Модель обработки исключительной ситуации:
2 модели:
неВозобновимая – при возникновении исключительной ситуации, среда
выполнения начинает сканировать стек в поисках ближайшего обработчика
исключительной ситуации, при сканирование стек разрушается, работа
программы продолжается с места исключения
Возобновимая – при возникновении исключительной ситуации сохраняется
копия стека, при выше описанной ситуации, восстанавливается стек, и работа
программы работает с места последнего взаимодействия.
Основными принципами безопасного программирования являются:
1) Необходимость проверки параметров, получаемых методов, даже если они
заведомо правильные.
2) Необходимость проверки данных возвращаемых методу.
3) Необходимость проверки результатов файловых операций
4) Необходимость проверки результатов для работы с памятью
5) Необходимость предотвращения ошибок, арифметических вычислений
Правила построения интерфейса пользователя.
В ходе хитрых исследований было установлено, что основные проблемы,
связанные с построением интерфейса пользователя.
1)человеку свойственно ошибаться
2)человек осознает информацию достаточно медленно по меркам
компьютера
3)глаз быстрей руки
4)правило 7+-2
Человек способен хранить в кратковременно памяти не более 10 элементов
Там где более 10 элементов, интерфейс воспринимается сложнее.
5) Человек быстрее узнает что-то, чем вспоминает, как оно выражается,
значительно проще выбрать что-то из списка, чем набрать его имя или
идентификатор.
6) Внимание человека, прежде всего, акцентируется на движении объектов,
затем на объектах выделенных цветом, и только потом на остальных формах
выделения.
7) лучший способ отвлечь человека от работы, вставить в интерфейс
анимацию.
Правила построения удобного интерфейса пользователя
1)Правило доступности:
Система должна быть постоянно понятной, чтобы пользователь никогда
раньше не видавший её, но владеющий соответствующими навыками в
предметной области и в области информационных технологий мог начать
работу в ней без подготовки.
2) Правило эффективности:
Система не должна препятствовать эффективной работе опытных
пользователей, плохое решение ориентация интерфейса только на новичка.
3) правило непрерывного движения вперёд
Система должна способствовать непрерывному росту знаний, умений,
навыков пользователя, приспосабливаясь к его меняющемуся опыту.
Принципы построения интерфейса пользователя
1) Принцип структуризации:
Пользовательский интерфейс должен быть целесообразно
структурирован, родственные части его должны быть похожи и
связанные, а независимые - не похожи и раздельные.
2) Принцип видимости:
Все функции и данные необходимы для выполнения определённой
задачи, должны быть видны, когда пользователь принимается её
выполнить
3) Принцип простоты:
Наиболее распространённые операции должны быть быстрыми, при
этом должны быть ссылки на более продвинутые процедуры.
4) Принцип обратной связи:
Пользователь должен получать сообщения о действиях системы и о
важных сообщениях внутри неё, сообщения должны быть краткими
понятными, написаны на языке понятном пользователю.
5) Принцип толерантности
Интерфейс должен быть гибким и терпим к ошибкам пользователя,
ущерб от ошибок должен снижаться за счёт возможности отмены и
повтора действий, и за счёт разумной интерпретации, любых разумных
действий и данных, по возможности следует избегать модального
взаимодействия.
Современный компонентный подход
Прикладные компоненты, самостоятельные блоки программного кода,
которые реализуют определённую бизнес - логику, распределены по
сети и могут быть использованы многократно, на сегодняшний день 2
технологии:
COM(Component Object Model)
CORBA (Component Object Request Broker Architecture)
OLE(object linked embading) – пиво(присоединённые и внедрённые
объекты)
Основные архитектурные принципы
Основное назначение данных технологий, поддержка, разработка и
развёртывание сложных ОО систем; любого отдельно взятого ОО
языка не достаточно для написания распределённых вычислительных
систем. Достаточно часто различные компоненты программного
комплекса требуют реализации на разных языках, на разных
аппаратных и программных платформах.
Функциями COM u CORBA являются функции промежуточного
обеспечения объектной среды.
Для обеспечения данной промежуточной сети необходимо реализовать
несколько базовых принципов:
1) Независимость от физического размещения объекта. Компоненты
программного обеспечения не обязаны находиться в одном
исполнительном файле, выполняться в рамках одного процесса или
размещаться на одной аппаратной системе.
2) Независимость от платформ. Компоненты могут выполняться на
различных аппаратных и операционных платформах,
взаимодействуя друг с другом в рамках единой системы.
3) Независимость от языка программирования. Различие в языках,
которые используются при создание компонентов, не препятствуют
их взаимодействию друг с другом.
Технологии CORBA u COM являются классами серверных
приложении, в которых функциональность объекта предоставляется
клиенту по средством обращения к абстрактному интерфейсу.
Интерфейс определяет, набор методов, который реализует
функции присущие данному классу.
Интерфейс, даёт возможность клиенту вызвать тот или иной
метод, скрывая от него детали его реализации.
Клиент получает доступ к объекту, только путём вызова метода,
определённого в интерпретации её объекта.
Это означает, что реальные действия выполняются в адресном
пространстве объекта, возможно удалённом от клиента.
В обеих технологиях в основе общения клиент – сервер лежит
механизм RPC(удалённый вызов процедур)
Механизм RPC реализует схему передачи сообщений, в
соответствии с которой в распределённом клиент-серверном
приложении, процедура-клиент передаёт специальное сообщение с
параметрами вызова по сети в удалённую серверную процедуру, и
результат её выполнения возвращается в другом сообщение
клиентскому приложению.
Для того, чтобы реализовать данную процедуру общения, на
стороне клиента и сервера поддерживается специальные компоненты
(клиент и серверный суррогаты)
Com: proxy –клиентский суррогат
Stub – серверный суррогат
Corba: skeleton – серверный суррогат
Написание Com приложений
Базовым понятием компонентных технологий является понятие
интерфейса, можно сказать, что интерфейс является контрактом между
программистом и компилятором. Программист обязуется реализовать
все методы, описанные в интерфейсе, и следовать требованиям,
предъявленным к реализации каждого из них .Компилятор обязуется
создать в программе внутренние структуры, позволяющие обращаться
к методам этого интерфейса из любого поддерживающего те же
приложения средства программирования. Описание интерфейса
включает в себя, описание методов и их параметров, но не включает их
реализацию. Кроме того, в объявлении может быть указано уникальное
16байтовое число, сгенерированное по специальным правилам,
гарантирующим её статическую уникальность.
GUID (global unic ID)
Интерфейсы могут наследоваться
Интерфейс не является классом.
1) Класс может выступать в реализации интерфейса, но класс содержит
код методов на конкретном языке, а интерфейс нет
2) Интерфейс строго реализован, как клиент, так и реализация интерфейса
должны использовать точно те же методы и параметры, что указаны в
описании интерфейса
3) Интерфейс является неизменным контрактом, нельзя определить
новую версию интерфейса с измененным набором методов или их
параметров, с тем же самым идентификатором
Реализация интерфейса – это код, который реализуют методы,
при этом за несколькими исключениями; не накладывается никаких
ограничений на то, каким образом будет выгладить реализация.
Физически реализация представляет собой массив указателей на
методы, адрес которого и используется в клиенте для доступа к СОМ
объекту.
IUnknown(базовый интерфейс)
Автоматическое управление памятью и подсчёт ссылок.
Автоматическое управление памятью основано на идеи подсчёта
ссылок на объект. Любой клиент желающий использовать СОМ объект
после создания, должен вызвать метод AddRet который увеличивает
внутренний счётчик ссылок на объект на единицу, по завершению
пользования объекта, клиент вызывает метод Release, уменьшающий
значение этого счётчика на единицу, по достижению счётчиком
нулевого значения, объект автоматически удаляется из памяти. Такая
модель позволяет клиентам, не вдаваться в подробности реализации
объекта, объекту обслуживать несколько клиентов и очищать память
по завершению работы с ними.
Функция QueryInterface позволяет получить в качестве выходного
параматра идентификатор интерфейса, если объект реализует
запрошенный интерфейс то метод: возвращает ссылку на него в
параметр obj, и вызывает метод AddRet полученного интерфейса и
возвращает о, в противном случае возвращается код ошибки.
СОМ - сервера – это специальным образом сформированное и
зарегистрированное приложение, которое позволяет клиентам
запрашивать у себя создание реализованных в нём объектов. Сервер
м.б. выполнен либо в виде динамического подключения библиотеки,
либо в виде исключительного файла.
Сервер в виде dll:
Такой сервер всегда выполняется в адресом пространстве
активирующего его приложения, за счёт этого снижается
подключенные расходы на вызов метода сервера. В тоже время
данный сервер менее надёжен, поскольку его память незащищена от
ошибок в вызывающем приложении, кроме того он не может
выполняться на удалённой машине без исключительного модуля
посредника, способного создать процесс, в которой может быть
загружена dll.
Сервер в виде исполняемого файла:
Данный сервер представляет собой обычный исполнительный файл
Windows, в котором реализована возможность создания СОМ объектов
по запросу других приложений.
Регистрация сервера.
Технология СОМ обеспечивает механизм автоматического
поиска сервера по запросу клиента, каждый СОМ объект имеет
длинный идентификатор, CLSID(class identificator)
Для каждого сервера прописывается информация необходимая
для нахождения и загрузки его модуля. Таким образом, клиентское
приложение недолжно беспокоиться о поиске сервера, достаточно
зарегистрировать его на компьютере, и СОМ автоматически найдёт и
загрузит нужный модуль. Кроме того объект может зарегистрировать
своё дружественное имя (PROG ID) оно комбинируется из имени
сервера и объекта и содержит ссылку на CLSID.
Сервера в виде исполнительных файлов, регистрируются
автоматически, при инсталляции, либо при первом запуске. Сервера в
виде dll необходимо регистрировать с помощью (reg srv32)
Com – сервера реализуются с использованием 2 моделей памяти
(потоки и комнаты)
Windows – это многозадачная, многопоточная среда с вытекающей
многозадачностью
Виды многозадачности:
1)кооперативная 2)вытесняющая
Кооперативная МЗ обеспечивает выполнение нескольких продуктов
одновременно, но при этом подход управления от одного процесса к
другому полностью обеспечивается программистом
2) вытесняющая МЗ основана на механизме вытеснения, то есть
руководством многозадачности занимается ОС, которая выделяет
каждому процессу определённый квант процессорного времени и
устанавливает приоритет процесса. Попадая на ЦП, процесс
выполняется в течении отведённого ему кванта, но по истечению,
сохраняется состояние регистров процессора и процесс вытесняется,
т.е. снимается с ЦП.
Применительно к СОМ вытесняющая многозадачность означает,
что клиент и сервер могут оказаться в различных процессах или
потоках приложения. К серверу может обращаться множество
клиентов, причем в непредсказуемый момент времени.
Технология СОМ решает эту проблему при помощи концепции
комнат(apartments), в которых выполняются СОМ клиенты и СОМ
сервера. Комнаты могут быть однопоточными (STA) и многопоточные
(MTA).
STA (single threaded apartment)
При создание STA, СОМ неявно создаёт окно, и при вызове метода
СОМ объекта, в этой комнате, посылает данному окну сообщение, при
помощи функции post message.
Таким образом организуется очередь вызовов методов, каждый
из которых обрабатывается, после того как будут обработаны
предшествующие вызовы.
Основные достоинства STA
- программист не заботиться о синхронизации методов (гарантируется,
что до начала выполнения текущего метода, никакой другой метод не
будет вызван)
-программист не заботиться о синхронизации доступа к полям классов.
Недостатки STA вытекают из её реализации
- дополнительные, иногда излишние, затраты на синхронизацию при
вызове метода
- невозможность отклика на вызов метода, пока не исполниться
предыдущий
Тем не менее, STA является наиболее подходящим выбором для
реализации СОМ сервера.
МТА (multi threaded apartment)
Не реализует автоматический сервис по синхронизации и не имеет его
ограничений, внутри неё может быть создано сколько угодно потоков и
объектов, причем ни один из объектов не привязан к конкретному
потоку. Это означает, что любой метод объекта может быть вызван
внутри МТА, сам автоматически ведёт пул потоков, и в нём вызывает
метод требуемого объекта. Очевидно, что СОМ сервер работающий в
МТА обладает высоким быстродействием и доступностью для
клиентов, однако он значительно сложен для реализации.
DOT NET
Net Framework (ASP NET, Библиотека классов, Common Language
Runtime)
Технология DOT NET является платформой для создания и
выполнения различных приложений, реализованных на различных
языках и функционирующих в рамках единой среды исполнения.
Crossплатформенная. Основной компонент: CLR. Данный компонент
располагается над сервисами ОС. Основное назначение: выполнение
приложений, соблюдение всех программных зависимостей, управление
памятью, обеспечение безопасности, интеграция с языками
программирования.
Разработчик не взаимодействуют с CLR напрямую, все сервисы
предоставляются унифицированной библиотекой классов, которая
располагается над CLR.
Библиотека содержит более 1000классов, для решения различных
задач.
Компилируемый для CLR код, называется управляемым кодом.
Помимо непосредственного кода, программа содержит информацию о
типах, ссылках использованных в коде.
Метаданные используются средой исполнения:
1)для обнаружения классов
2) для загрузки классов
3) генерация кода для конкретной платформы
4) для обеспечения безопасности
Среда выполнения так же следит за выполнением жизни объекта.
Используется, как и в СОМ, механизм подсчета ссылок, а удаление их
из памяти происходит с помощью сборщика мусора.
MSIL (Microsoft Inter media date language)
Код компилируемый технологией DOT NET переводиться не в
машинный код, для конкретной платформы, а в код промежуточного
языка, который представляет набор инструкций, независящих от
конкретного процессора и конкретной ОС, данный код включает
непосредственно выполняемый код и метаданные.
Метаданные.
Содержат описание типов, информацию о версии, ссылки на разные
сборки, и другую информацию, используемую средой выполнения. В
целом метаданные представляют собой высокоуровневый вариант
библиотеки типов, метаданные используются самой средой
выполнения, загрузчиком классов, а также разные утилитами.
VB -> MSIL -> MSIL -> машинный код -> приложение
Программа на промежуточном языке остается неизменной, до тех пор,
пока она не вызывается на выполнение, в момент, когда управление
передается среде исполнения, промежуточный код преобразуется в код
для конкретной платформы, эту задачу выполняет компилятор JIT,
теоретически только данный компилятор является зависимым от
конкретной платформы, однако на самом деле от платформы зависят
ряд классов и других компонентов.
Если из NET программы напрямую вызываются функции ОС,
программа остается привязанной к конкурентной платформе.
JIT не выполняет компиляцию всего кода при первом обращении
к программе. Вместо этого каждый метод компилируется, при
обращении к нему. И таким образом неиспользованный код не
компилируется.
Помимо этого существует возможность откомпилировать
промежуточный кол в исполнительный файл для конкретной
платформы.
Сборка представляет собой коллекцию из одного или более файлов, эти
файлы содержат код на промежуточном языке, и различные ресурсы
необходимые для функционирования данного кода, а также ссылки на
другие сборки.
GAC (Global assembler cash)
Сборки, которые содержат GAC: называются статическими, и хранятся
на жестком диске компьютера. Помимо статических сборок,
существуют динамические сборки.
Динамическая сборка. Создаются во время выполнения программы и
на диске обычно не сохраняются, сборки являются минимальной
единицей внедрения, контроля версий, повторного использования, и
системой безопасности. Каждая сборка содержит специальные
метаданные, называется манифестов. В манифесте содержится
информация о классах, типах, ссылках на другие сборки. Сборка,
используемая в более чем 1 приложении, содержится в глобальной
ассамблеи кэш.
CTS (common type system)
Определяет типы, поддерживаемые в CLR. Типы можно разделить на 2
большие группы
1)Данные со значениями 2) ссылочные данные
1) описывают значения, представляемые последовательностью байт.
Любой тип технологии DOT NET, является классом
2)3 категории: объектные, интерфейсные, указательные типы.
Download