Информатика и информационные технологии. Лекция 5. Языки и технологии программирования

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "Информатика и информационные технологии. Лекция 5. Языки и технологии программирования"

Транскрипт

1 Информатика и информационные технологии Лекция 5. Языки и технологии программирования

2 Основные этапы решения задач с помощью компьютера: Постановка задачи; Анализ и исследование задачи, модели; Разработка алгоритма Пpогpаммиpование (кодирование на языке программирования); Тестиpование и отладка; Анализ результатов решения задачи; Сопровождение программы. 2

3 Уровни языков программирования Естественные языки (в системах с ИИ) Терминология конкретной предметной области (в специализированном ПО) Высокоуровневые языки программирования (C++, C#, Object Pascal, Java, PROLOG, LISP, SMALLTALK, Perl, PHP, Python, Ruby) Низкоуровневые языки программирования (напр. C) Ассемблер (мнемокоды) 3 Машинный код (то Кафедра то, что АППМ, исполняет НГТУ процессор) 3

4 Языки высокого/низкого уровня Языки высокого уровня максимально приближены к задаче. Наиболее выражено в предметно ориентированных языках. что? Приоритет Языки низкого уровня в центре внимания не задача, а технология её реализации, связанная с языком / машиной. Привлекаются дополнительные понятия, не связанные с задачей. как? Приоритет 4 4

5 Разнообразие языков программирования Со времени создания первых программируемых машин человечество придумало > 8500 языков программирования. Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования. 5

6 Классификации языков Языки программирования Высокого уровня Низкого уровня: C / C++, Assembler Общего назначения: Perl, Java, Python Предметно-ориентированные: Matlab, PL SQL, AutoLisp Языки программирования Императивные: C, Pascal, Java, Perl Декларативные Мультипарадигменные Ruby Функциональные языки: LISP, Haskell Языки логического прогр.: Prolog 6 6

7 Парадигмы программирования Парадигма способ организации программы, то есть принцип ее построения. Наиболее распространенными являются процедурная и объектно-ориентированная парадигмы. Они различаются способом декомпозиции, положенным в основу при создании программы. Процедурная декомпозиция состоит в том, что задача, реализуемая программой, делится на подзадачи, аони, всвою очередь на более мелкие этапы, то есть выполняется пошаговая детализация алгоритма решения задачи. Объектно-ориентированная декомпозиция предполагает разбиение предметной области на объекты и реализацию этих объектов и их взаимосвязей в виде программы. Функциональная и логическая парадигмы. 7

8 Классификация языков программирования По стилю (используемая парадигма) или виду организации: Алгоритмические Pascal, C, Fortran, Cobol, Basic Объектно-ориентированные C++, Object Pascal (в среде Delphi), Java, C# Логические Prolog, SmallTalk Функциональные LISP По виду выполнения программы: Компилируемые Pascal, C, С++, С#, Pascal, Fortran, Cobol, язык Ассемблера Интерпретируемые Basic, Prolog, LISP, Java Скриптовые Javascript, PHP, Python, Perl, Ruby 8

9 Есть еще проблемно-ориентированные (специализированные) языки программирования Языки для моделирования Языки программирования для станков с ЧПУ Языки программирования промышленных контроллеров Языки программирования роботов Скриптовые языки в играх и в инструментальном ПО для создания игр 9

10 TIOBE Programming Community Index for February 2009 Position Feb Position Feb Java C C++ (Visual) Basic PHP C # Python Perl Delphi Programming Language JavaScript Ratings Feb % 15.8% 9.6% 8.8% 8.8% 5% 4.5% 4.1% 3.6% 3.5% 10

11 Алгоритмические компилируемые языки. Алгоритм Алгоритм это упорядоченная совокупность точных (формализованных) и полных команд исполнителю алгоритма (человек, ЭВМ), задающих порядок и содержание действий, которые он должен выполнить для нахождения решения любой задачи из рассматриваемого класса задач. 11

12 Алгоритмические компилируемые языки. Любой алгоритм ориентирован на некоторый общий метод решения класса задач и представляет собой формализованную запись метода, процедуры. Алгоритм, записанный на некотором алгоритмическом, формальном языке, состоит из заголовка алгоритма (описания параметров, спецификаций класса задач) и тела алгоритма (последовательности команд исполнителя, преобразующих входные параметры в выходные). Для записи, исполнения, обмена и хранения алгоритмов существуют различные средства, языки, псевдокоды блок-схемы, структурограммы (схемы Нэсси-Шнайдермана), Р-схемы, школьный алгоритмический язык (ШАЯ), различные языки программирования. 12

13 Алгоритмические компилируемые языки. Основные свойства алгоритма Детерминированность определённость. В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных. Понятность алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, т.е. которые входят в его систему команд. Завершаемость (конечность) при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0. Массовость алгоритм должен быть применим к разным наборам исходных данных. 13

14 Алгоритмические компилируемые языки. Базовые алгоритмические структуры Различают три базовые алгоритмические структуры: следование, ветвление, повторение. Структура следование состоит из двух команд с указанной очередностью их выполнения и имеет вид: <команда предшественник>;<команда преемник>. Структура типа ветвления в полной форме состоит из некоторого условия, проверяемого на истинность при выполнении структуры, команды, выполняемой при выполнении проверяемого условия, и команды, выполняемой при невыполнении условия. Структура имеет вид if <условие> then <команда, выполняемая при выполнении условия> else <команда, выполняемая при невыполнении условия>;. Структура повторения (цикл) служит для компактной записи одного и того же набора команд, повторяемых для различных значений параметров команд. Телом цикла называется последовательность повторяемых команд, которая может быть и пустой. 14

15 Алгоритмические компилируемые языки. Примеры базовых алгоритмических структур Условный оператор if : if (выражение_условие) оператор_1; else оператор_2; ДА Вход Условие истинно? НЕТ Действие 1 Действие 2 Выход 15

16 Алгоритмические компилируемые языки. Примеры базовых алгоритмических структур Один из операторов цикла цикл типа while (пока): while (условие) оператор; Пример: Вычислить А N : n=7; a=-3; i=1; p=1; while (i<=n) { p*=a; i++; } нет n=7 a=-3 i=1 p=1 i<=n да p*=a i++ 16

17 Ключевые понятия любого алгоритмического языка Синтаксис языка Как выглядит исходный текст программы Семантика языка Чему соответствует в исполняемой программе то, что написано в исходном тексте Переменная: Идентификатор (имя переменной) Тип Область видимости (локальные, глобальные переменные) Присваивание Значений переменным Оператор синтаксически законченный фрагмент программы, имеющий определенную семантику Связывание Имен переменных и функций с их адресом в виртуальной памяти Процедуры и функции (поименованные части программы, которые можно многократно вызывать в программе) 17

18 Файл ppppp.c Пример подготовки программы на алгоритмическом компилируемом языке С Исходный текст на СИ Включаемые файлы Обработка директив Препроцессор Файл xxxxx.h Полный текст программы (единица трансляции) Компилятор Компиляция или трансляция Объектный код программы Стандартные библиотеки Файл ppppp.obj Компоновщик Связывание Исполняемая программа Файл ppppp.exe 18

19 #include <stdio.h> // включение в текст // файла с функциями // ввода-вывода /* Пример 1 */ void main(void) { int a, b, sum;// описание (определение) переменных printf("введитедвачислааиb \n"); scanf("%d%d", &a, &b); // ввод переменных sum=a+b; printf("a= %d b= %d Сумма= %d \n", a,b,sum); } // пример вывода: а=10 b=20 Сумма=30 19

20 Пример программы на С Программа вводит строку с клавиатуры, инвертирует ее (переписывает наоборот) и выводит. Строка запоминается в строковой переменной (массиве символьных переменных) st и не может превышать 9 символов Обратитевниманиенаобмен значениями двух элементов массива с использованием дополнительной переменной c #include <stdio.h> void main() { char st[10], c; int n, i; gets(st); n = sizeof(st); n = 0; while (st[n]!= 0) n++; n >> 1; for (i = 0; i<n/2; i++) { c = st[i]; st[i] = st[n-i-1]; st[n-i-1] = c; } puts(st); } 20

21 Объектно-ориентированное программирование (ООП). Объекты Объект понятие, абстракция или любой предмет с четко очерченными границами, имеющий смысл в контексте рассматриваемой прикладной проблемы. Введение объектов преследует две цели: понимание прикладной задачи (проблемы); введение основы для реализации на компьютере. Примеры объектов: стул, Сбербанк, деталь, станок, дом, уравнение. 21

22 Объекты Каждый объект имеет определенное время жизни. В процессе выполнения программы, или функционирования какой-либо реальной системы, могут создаваться новые объекты и уничтожаться уже существующие. Объект (по Гради Бучу) это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области. Каждый объект имеет состояние, обладает четко определенным поведением и уникальной идентичностью. 22

23 Состояние Пример: студент сидит, затем прыгает и в то же время выполняет другие действия. Состояние объекта может определяться наличием или отсутствием связей между моделируемым объектом и другими объектами. Пример: студент и велосипед. Для рассмотренных примеров атрибутами объекта «Студент» могут быть: текущая деятельность человека (сидит, прыгает); наличие велосипеда (есть или нет). Атрибутами объекта «Велосипед» могут быть: - владелец (фамилия студента), - тип (детский, спортивный, горный и т.п.) 23

24 Состояние (2) Состояние совокупный результат поведения объекта: одно из стабильных условий, в которых объект может существовать, охарактеризованных количественно; в любой момент времени состояние объекта включает в себя перечень (обычно статический) свойств объекта и текущие значения (обычно динамические) этих свойств. 24

25 Поведение Для каждого объекта существует определенный набор действий, которые с ним можно произвести. Пример: операции с файлом. Результат выполнения действий зависит от состояния объекта на момент совершения действия, т.е. нельзя, например, удалить файл, если он открыт кем-либо (заблокирован). Втожевремядействия могут менять внутреннее состояние объекта при открытии или закрытии файла свойство «открыт» принимает значения «да» или «нет», соответственно. 25

26 Поведение (2) Программа, написанная с использованием ООП, обычно состоит из множества объектов, и все эти объекты взаимодействуют между собой. В терминологии объектно-ориентированного подхода понятия «действие», «сообщение» и «метод» являются синонимами. Поведение (behavior) действия и реакции объекта, выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта. 26

27 Уникальность Уникальность это то, что отличает объект от других объектов. Пример: банкноты. В машинном представлении под параметром уникальности объекта чаще всего понимается адрес размещения объекта в памяти. Уникальность объекта состоит в том, что всегда можно определить, указывают две ссылки на один и тот же объект или на разные объекты. 27

28 Уникальность (2) Уникальность имени ссылки на объект. На один объект может указывать несколько ссылок, и ссылки могут менять свои значения (ссылаться на другие объекты). Уникальность (identity) свойство объекта; то, что отличает его от других объектов. 28

29 Классы Все банкноты принадлежат одному и тому же классу объектов (именно с этим связана их одинаковость). Номинальная стоимость, материал, форма это атрибуты класса. Совокупность атрибутов и их значений характеризует объект. Наряду с термином «атрибут» часто используют термины «свойство», «реквизит» и «поле». Все объекты одного и того же класса описываются одинаковыми наборами атрибутов. Однако объединение объектов в классы определяется не наборами, а семантикой. «Конюшня» и «лошадь» могут иметь одинаковые атрибуты: цена и возраст. 29

30 Классы (2) Формально класс это шаблон поведения объектов определенного типа с заданными параметрами, определяющими состояние. Все экземпляры одного класса (объекты, порожденные от одного класса) имеют один и тот же набор свойств и общее поведение, то есть одинаково реагируют на одинаковые сообщения. В соответствии с UML (Unified Modelling Language унифицированный язык моделирования), класс изображается в виде прямоугольника, состоящего из трех частей. В верхней части помещается название класса, в средней свойства объектов класса, в нижней действия, которые можно выполнять с объектами данного класса (методы). Каждый класс также может иметь специальные методы, которые автоматически вызываются при создании и уничтожении объектов этого класса: конструктор (constructor) - выполняется при создании объектов; деструктор (destructor) - выполняется при уничтожении объектов. 30

31 Пример класса - класс Human Attributes свойства, operations описания методов, private свойства доступны внутри класса, public методы доступные извне, описывают интерфейс для объектов этого класса 31

32 Инкапсуляция Инкапсуляция (encapsulation) это сокрытие реализации класса и отделение его внутреннего представления от внешнего (интерфейса). При использовании объектно-ориентированного подхода не принято применять прямой доступ к свойствам какого-либо класса из методов других классов. Для доступа к свойствам класса принято задействовать специальные методы этого класса для получения и изменения его свойств (getters и setters). Внутри объекта данные и методы могут обладать различной степенью открытости (или доступности). 32

33 Инкапсуляция (2) Открытые члены класса составляют внешний интерфейс объекта. Это то, чтодоступнодругим классам. Благодаря сокрытию реализации за внешним интерфейсом класса можно менять внутреннюю логику отдельного класса, не меняя код остальных компонентов системы. Это свойство называется модульность. Преимущества доступа через методы: контроль корректных значений полей; лёгкость изменения способа хранения данных; простота отладки. 33

34 Наследование Наследование (inheritance) это отношение между классами, при котором класс использует структуру или поведение другого класса (одиночное наследование), или других (множественное наследование) классов. Наследование вводит иерархию «общее/частное», в которой подкласс наследует от одного или нескольких более общих суперклассов. Подклассы обычно дополняют или переопределяют унаследованную структуру и поведение. 34

35 Полиморфизм Полиморфизм является одним из фундаментальных понятий в объектноориентированном программировании наряду с наследованием и инкапсуляцией. Слово «полиморфизм» греческого происхождения и означает «имеющий много форм». Функция с одним и тем же названием 35

36 Полиморфизм (2) Полиморфизм (polymorphism) положение теории типов, согласно которому имена (например, переменных) могут обозначать объекты разных (но имеющих общего родителя) классов. Следовательно, любой объект, обозначаемый полиморфным именем, может по-своему реагировать на некий общий набор операций. Перегрузка методов возможность создания нескольких методов с одним и тем же именем, но разным количеством или различными типами передаваемых параметров. 36

37 Программирование в ООП заключается в создании иерархии классов и написании методов для этих классов ВязыкеС++ программный модуль состоит из двух файлов: с расширениями.h и.cpp Вфайлеname.h описаны классы (их структура), авname.cpp методы классов (в виде функций или подпрограмм) 37

38 Пример простого консольного приложения на С++ Приложение вводит команду: символ 1, 2, 3 или q Выполняет ее обращаясь к соответствующему методу класса Sort 38

39 #include <stdio.h> #include <conio.h> #include <string.h> #include <windows.h> #include "Unit2.h" Sort s; void main() { SetConsoleTitle("Bubble sorting by Lysenkov Victor"); char c = '1'; while (c!= 'q') { clrscr(); printf("operations:\n\n"); printf("1. Int numbers sorting\n"); printf("2. Float numbers sorting\n"); printf("3. Strings sorting\n"); printf("q. Quit\n\n"); printf(">> "); c = getch(); switch(c) { case '1': s.intsort(); break; case '2': s.floatsort(); break; } } } case '3': s.stringsort(); break; case 'q': break; default: printf("\nwrong choise!"); getch(); break; 39

40 Класс Sort class Sort { public: Sort(); // конструктор void IntSort(); // сортировка целых чисел void FloatSort(); void StringSort(); ~Sort(); // деструктор }; 40

41 Функция сортировки целых чисел void Sort::IntSort() { clrscr(); int size = 0; printf("quantity of elements: "); scanf("%d", &size); int *array = new int[size]; for (int i=0; i<size; i++) { printf("[%d]: ", i); scanf("%d", &array[i]); } printf("\narray before sorting:\n"); for (int i=0; i<size; i++) printf("%d ", array[i]); int tmp = 0; } for (int i=0; i<size - 1; i++) for (int j=0; j<size - 1; j++) if (array[j] > array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } printf("\n\narray after sorting:\n"); for (int i=0; i<size; i++) printf("%d ", array[i]); delete []array; getch(); 41

42 Логическое программирование. Пролог (Prolog) язык логического программирования Базовым принципом языка Prolog является равнозначность представления программы и данных (декларативность), отчего утверждения языка одновременно являются и записями, подобными записям в базе данных, и правилами, несущими в себе способы их обработки 42

43 Язык программирования Prolog Особенности языка Описание проблемы и правил ее решения в виде предикатовфактов и правил логического вывода (в логике предикатов 1-го порядка) (предикат логическая функция, имеющая значения 0 или 1, yes или no, true или false) Нахождение всех возможных решений с помощью механизма поиска с возвратом (backtracking) (или обратного логического вывода) Интерпретируемый (обычно) язык с простым синтаксисом, хотя некоторые версии (напр. PDC-Prolog) позволяют создавать исполняемый файл программы (exe-файл) Запуск программы на Прологе осуществляется заданием т.н. целевого предиката, который надо доказать. Выполнение программы это его доказательство (с помощью логического вывода). 43

44 Пример программы на PDC-Prolog Факты Воробей это птица. Воробей родитель птенца. Правило вывода Некто является птицей, если него есть родитель птица. Программа птица (воробей). птица (X): родитель (Y, X), птица (Y). родитель (воробей, птенец). Запрос птица (Z) Все возможные решения: Z = воробей Z = птенец 44

45 Пример программы на PDC-Prolog PREDICATES bird (symbol) parent (symbol, symbol) CLAUSES Факт bird («воробей»). bird (X): parent (Y, X), bird (Y). parent («воробей», «птенец»). Факт Правило вывода Goal: bird (Z) Z=«воробей» Z=«птенец» Внешняя цель 45

46 Поиск с возвратом на PDC-Prolog PREDICATES tens (string) ones (string) start CLAUSES tens («Двадцать»). tens («Тридцать»). ones («два»). ones («три»). РЕШЕНИЕ Двадцать два Двадцать три Тридцать два Тридцать три start :- tens (X), ones (Y), write (X,, Y), nl, fail. GOAL start. 46

47 Функциональное программирование. Язык программирования LISP Особенности языка Одинаковая форма представления данных и программ в виде списка или S-выражений (вложенных друг в друга скобочных структур) Не требуется явное описание типов данных, используемых в программе Основной способ решения рекурсия Интерпретируемый (обычно) язык с простым синтаксисом, хотя некоторые версии позволяют создавать исполняемый файл программы (exe-файл) На нем написана система автоматизации проектирования AutoCAD 47

48 Пример простой программы на LISP: Вычисление суммы 2+3 (+ 2 3) можно рассматривать как список или S-выражение или программа или данные > (+ 2 3) 5 > (+ 2 3) (+ 2 3) > (quote (+ 2 3)) (+ 2 3) 48

49 Требования к ПО Функциональность: программа должна выполнять ожидаемые функции. Функции нужно реализовывать в порядке их необходимости заказчику, чтобы это сделать, необходимо «вникнуть» в предметную область и определить, что действительно важно заказчику; выделить главные, вспомогательные и второстепенные функции. Надежность: необходимо обеспечить минимум ошибок, сбоев, защиту информации от непреднамеренной порчи. Программа должна разумно реагировать на ввод пользователем любых данных, иначе пользователи будут «бояться» ошибиться, что, как минимум, замедлит их работу с системой. Кроме того, программы, предназначенные для работы в компьютерных сетях, требуют защиты от разного рода вирусных и хакерских атак, программа должна проверять все входящие данные, особенно тщательно те, которые приходят по сети. Удобство: программа должна иметь интуитивно-понятный интерфейс, удобный для пользователя. Нужно минимизировать количество действий, необходимых пользователю для выполнения задачи, но не в ущерб понятности самих действий. Эффективность: программа должна эффективно использовать память, процессор, «жёсткий» диск и другие ресурсы системы. В особых случаях (когда «медлительность» системы критична) это требование становится едва ли не самым важным, важнее надёжности, но чаще оно менее существенно, чем сопровождение. Сопровождение: программа должна быть понятной, гибкой и «простой в сопровождении, переносе на новые платформы и развитии» - это требование программистов, в отличие от предыдущих, которые являются требованиями заказчиков, пользователей. Удобство сопровождения, как правило, находится в противоречии с эффективностью и для большинства программ более важно. Понятность программы позволяет быстро её развивать, добавлять новые функции, исправлять ошибки. 49

50 Критерии качества ПО Внешние характеристики корректность наличие/отсутствие дефектов в спецификации, проекте и реализации практичность легкость изучения и использования эффективность степень использования системных ресурсов надежность способность системы выполнять необходимые функции; интервал между отказами целостность способность предотвращать неавторизованный или некорректный доступ адаптируемость возможность использования в других областях и средах правильность степень безошибочности данных, выдаваемых системой живучесть способность продолжать работу при недопустимых данных или в напряженных условиях Внутренние характеристики удобство сопровождения тестируемость удобочитаемость гибкость портируемость возможность повторного использования понятность 50

51 Технологии программирования Технология программирования способ организации процесса создания программы. На разных уровнях и по разным критериям выделяют пересекающиеся модели: Нисходящее (структурное) программирование Макетирование Спиральная (итерационная) модель разработки ПО Объектно-ориентированное программирование Компонентный подход (COM, CORBA) САSЕ-технологии RAD RUP Экстремальное программирование 51

52 Стратегии создания ПО Водопад -ная Итеративные Эволюционная Инкрементная Вначале определены все требования? Циклов конструирования 1 >1 >1 Промежуточное ПО распространяет ся? - ± + 52

53 Водопадная модель жизненного цикла ПО: Постановка задачи Анализ Проектирование Синонимы: классический жизненный цикл, каскадная модель Реализация Модификация 53

54 Макетирование (прототипирование) 1 Построение/ уточнение макета Оценка макета заказчиком 2 Проектирование продукта 54

55 Инкрементная модель 1-й инкремент Поставка 1-го инкремента Анализ Проекти рование Кодирование Тестирование 2-й инкремент Поставка 2-го инкремента Анализ Проекти рование Кодирование Тестирование 3-й инкремент Поставка 3-го инкремента Анализ Проекти рование Кодирование Тестирование 55

56 Технология RAD Rapid Application Development Быстрая разработка приложений. Ориентирована на максимально быстрое получение первых версий разрабатываемого ПО. Она предусматривает: ведение разработки небольшими группами (3-7 человек), каждая из которых проектирует и реализует отдельные подсистемы, позволяет улучшить управляемость проекта; использование готовых компонентов способствует уменьшению времени получения работоспособного прототипа; наличие четко проработанного графика цикла, рассчитанного не более чем на три месяца, существенно увеличивает эффективность работы. Технология RAD хорошо зарекомендовала себя для относительно небольших стандартных проектов, разрабатываемых для конкретного заказчика. 56

57 Работа в среде Delphi 57

58 Спиральная модель разработки ПО Программное обеспечение создается итерационно с использованием метода прототипирования. Прототипом называют действующий программный продукт, реализующий отдельные функции и внешние интерфейсы разрабатываемого программного обеспечения. Постановка задачи, планирование Анализ риска Реализация, оценка заказчиком Проектирова ние 58

59 Экстремальное программирование Основная идея экстремального программирования (ХР) устранить высокую стоимость изменений, вносимых в ПО в процессе как разработки, так и эксплуатации. Цикл разработки в ХР состоит из очень коротких итераций. Четырьмя базовыми действиями в цикле являются: выслушивание заказчика проектирование кодирование тестирование. Заказчик постоянно присутствует в группе разработчиков. При принятии решений всегда стремятся выбрать самое простое, тесты пишутся еще до написания кода. Сборка системы выполняется ежедневно. 59

60 Компонентный подход и САSЕтехнологии Компонентный подход предполагает построение программного обеспечения из отдельных компонентов физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов, объекты-компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию. Компонентный подход лежит в основе технологий, разработанных на базе СОМ и СОRВА. 60

61 Технологии СОМ Технология СОМ определяет общий принцип взаимодействия программ любых типов: библиотек, приложений, операционной системы, т. е. позволяет одной части программного обеспечения использовать функции (службы), предоставляемые другой, независимо от того, функционируют ли эти части в пределах одного процесса, в разных процессах на одном компьютере или на разных компьютерах. Модификация СОМ, обеспечивающая передачу вызовов между компьютерами, называется DCOM По технологии СОМ приложение предоставляет свои службы, используя объекты СОM, которые являются экземплярами классов СОМ. Объект СОМ может реализовывать несколько интерфейсов. 61

62 Технологии СОМ На базе технологии COM были разработаны компонентные технологии, решающие различные задачи разработки программного обеспечения. OLE-automation технология создания приложений, обеспечивающая доступ к их внутренним службам. Например, ее поддерживает Microsoft Ехсеl, предоставляя другим приложениям свои службы. ActiveX технология, построенная на базе OLE-automation, предназначена для создания как распределенного в сети, так и сосредоточенного на одном компьютере программного обеспечения. Предполагает использование визуального программирования для создания компонентов элементов управления ActiveX. Полученные таким образом элементы управления можно устанавливать на компьютер дистанционно с удаленного сервера, причем устанавливаемый код зависит от используемой операционной системы. 62

63 Технологии СОМ MTS (Microsoft Transaction Server сервер управления транзакциями) технология, обеспечивающая безопасность и стабильную работу распределенных приложений при больших объемах передаваемых данных. MIDAS (Multilier Distributed Application Server сервер многозвенных распределенных приложений) технология, организующая доступ к данным разных компьютеров с учетом балансировки нагрузки сети. Все указанные технологии реализуют компонентный подход, заложенный в СОМ. 63

64 CASE-технологии Computer Aided Software/System Engineering автоматизированная разработка ПО/систем Существуют САSЕ-технологии, поддерживающие как структурный, так и объектный (в т. ч. компонентный) подход САSЕ-средства повышают производительность труда программистов и улучшают качество программного обеспечения. Они: обеспечивают автоматизированный контроль совместимости спецификаций проекта; уменьшают время создания прототипа системы; ускоряют процесс проектирования и разработки; автоматизируют формирование проектной документации для всех этапов жизненного цикла; частично генерируют коды программ для различных платформ разработки; поддерживают технологии повторного использования компонентов системы; обеспечивают возможность восстановления проектной документации по имеющимся исходным кодам. 64

65 UML язык для CASE-средств UML - Unified Model Language - является языком для специфицирования, визуализации, конструирования и документирования программных продуктов, а также используется в бизнес-моделировании и моделировании любых иных (не программных) систем. UML позволяет задавать следующие аспекты: Диаграммы вариантов использования (use case diagrams) Диаграммы классов (class diagrams) Диаграммы поведения Диаграммы состояний (statechart diagrams) Диаграммы действий (activity diagrams) Диаграммы взаимодействия (interaction diagrams) Диаграммы последовательностей(sequence diagrams) Диаграммы взаимодействий(collaboration diagrams) Диаграммы реализации (implementation diagrams) Диаграммы компонент (component diagram) Диаграммы развертывания (deployment diagram) 65

66 Структурное программирование В основе структурного подхода лежит идея декомпозиции, то есть разбиения системы на части, реализующие отдельные подзадачи. Каждая подзадача, в свою очередь, дробится на более мелкие. Этот процесс называется нисходящим проектированием. При написании структурной программы применяется фиксированный набор конструкций, называемых базовыми, что позволяет уменьшить как количество ошибок в программе, так и их цену. Под ценой ошибки понимается стоимость ее исправления: она тем выше, чем позже в процессе разработки обнаружена ошибка. 66