Вторая половина ответов на вопросы (987661), страница 4
Текст из файла (страница 4)
Каждая фаза заканчивается вехой; веха определяется по наличию определенного набора моделей, представленных в заранее оговоренном виде. На каждой вехе следует ответить на вопросы: что удалось достичь на законченной фазе, что не удалось (в таком случае возникают вопросы: Почему? Что надо сделать?), что планируется на следующей фазе.
Разработка нового программного продукта начинается с составления модели вариантов использования, которая в ходе разработки:
· Описывается в модели анализа.
· Реализуется в модели проектирования.
· Распределяется в модели развертывания.
· Реализуется в модели реализации.
· Проверяется в модели тестирования.
Модель вариантов использования дает ответ на вопрос «Что должна делать система?», оставляя ответ на вопрос «Как?» на потом.
Модель анализа предназначена для уточнения деталей вариантов использования и создания первичного распределения поведения системы по набору объектов. Составление модели анализа заключается в создании диаграмм классов.
Модель проектирования определяет статическую структуру системы (подсистемы, классы, интерфейсы) и реализованные в виде кооперации варианты использования. Эта модель описывается диаграммами классов и взаимодействий (диаграммы последовательности и кооперативная диаграмма).
Модель реализации состоит из компонентов и определяет раскладку классов по компонентам. Диаграмма компонентов.
Рис. 4.2.
Модель развертывания определяет физические компьютеры и распределения компонентов по ним. Диаграмма развертывания.
Модель тестирования описывает тесты для проверки вариантов использования.
Кроме перечисленных могут быть составлены модели предметной области и бизнес - модели для описания контекста системы т.е. для описания принципов функционирования той предметной области, для которой создается
новый программный продукт. Для модели предметной области подходит диаграмма классов, для бизнес - модели – диаграмма деятельности.
Подведем итоги.
В ходе фазы анализа идея превращается в концепцию готового продукта и создается план его разработки. Можно сказать и так: прикладная задача превращается в программистскую задачу. Должны быть получены ответы на следующие вопросы:
-
Что система должна делать для ее основных пользователей?
-
Как должна выглядеть архитектура системы?
-
Каков план и во что обойдется разработка продукта?
Обобщенная схема процесса разработки программного продукта приведена на рис. 4.2.
В ходе фазы проектирования детально описывается большинство вариантов использования и разрабатывается архитектура системы. В ходе этой фазы определяются наиболее критичные варианты использования и создается базовая архитектура. Необходимо иметь ответ на вопрос: достаточно ли проработаны варианты использования, архитектура и план; взяты ли риски под контроль настолько, что можно взять на себя обязательство выполнения всей работы при заданных временных и финансовых ограничениях?
В ходе фазы проектирования происходит создание продукта. Базовый уровень архитектуры разрастается до полной развитой системы. В конце этой фазы должен существовать полноценный продукт, готовый для передачи заказчику. Вопрос окончания фазы: удовлетворяет ли полученный продукт требованиям заказчика?
В ходе фазы внедрения продукт существует в виде бета-версии. Небольшое число квалифицированных пользователей, работая с бета-версией, сообщают об обнаруженных дефектах и недостатках. Дефекты и недостатки разделяют на две категории: требующие немедленного устранения, и устранение которых можно отложить до следующей фазы построения.
54. Особенности языка программирования C# и среды Microsoft Visual Studio 2008.
C# (произносится си-шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеетстатическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.
VISUAL STUDIO 2008
-
Первое средство, поддерживающее LINQ
-
Конструктор Windows Presentation Foundation (WPF)
-
Поддержка разработки AJAX
-
Средства анализа программного кода, включая метрики кода
Выпущенная в ноябре 2007 г., система Microsoft Visual Studio 2008 была первой средой, включающей визуальный конструктор для Windows Presentation Foundation (WPF) с линиями привязки и вкладками событий, поддерживающими разработку в стиле RAD. Она также помогала разработчикам, работавшим с выпуском 2007 системы Microsoft Office, предоставив конструкторы для Outlook и меню интерфейса Microsoft Office Fluent. Для многопрофильных рабочих групп система Visual Studio Team System обеспечивала повышенную масштабируемость, включая поддержку непрерывной интеграции.
Кроме того, она предоставила в распоряжение веб-разработчиков инструменты форматирования CSS, возможность программирования в среде ASP.NET AJAX, а также поддержку IntelliSense для JavaScript. Введение языка LINQ (Language Integrated Query) обеспечило новые расширенные методы работы с данными и их обработки в среде Visual Basic и C#. Для повышения производительности приложения Visual Studio 2008 предоставляла инструменты анализа программного кода, включая метрики кода, которые помогали выявлять неэффективные или другие проблемные участки кода. Интегрированная система сборки проекта включала поддержку многопоточности как для сборки, так и для отладки.
55. Особенности работы с массивами на C#, невыровненные массивы.
В языке C# массив представляет собой указатель на непрерывный участок памяти. Другими словами, на этом языке имеются только динамические массивы.
Объявление одномерного массива
Тип-данных [] имя_массива;
объявление двумерного массива
Тип_данных [,] имя_массива;
Перед использованием массива он должен быть инициализирован, т.е. под него должна быть выделена память.
Примеры на одномерные массивы:
int[] arr1; //объявление массива без выделения памяти
int[] arr2=new int[66]; // совмещены объявление и инициализация
int[] arr3 = {2, 5, 55, -6, 8}; // элементам массива сразу будут присвоены значения, это означает и инициализацию
В C# массивы рассматривают как классы. Это дает возможность использовать при их обработке свойства. Для работы с одномерными массивами полезным окажется свойство arr1.Length – возвращает количество элементов массива arr1.
Пример на двумерные массивы:
int[,] a = new int[6, 12]; //инициализация
int[,] b ={ { 1, 2, 3 }, { 4, 5, 6 } }; //объявление с присвоением значений по строкам
b.GetLength(0); //возвращает количество элементов по первому индексу
b.GetLength(1); //возвращает количество элементов по второму индексу
a.GetUpperBound(0); // возвращает максимальное значение первого индекса
a.GetUpperBound(1); // возвращает максимальное значение второго индекса
a.Length; //возвращает количество элементов в массиве
Обратим внимание еще на одну функцию. Допустим, что в программе объявлены два массива:
int[] mas2={1,2,3,4};
int[]mas1=new int[4];
При объявлении mas1=mas2 мы, по сути, создаем два указателя на один и тот же массив, поэтому после этого присвоения все изменения, внесенные в один их этих массивов, автоматически передаются в другой. Если необходимо копировать массив таким образом, чтобы два массива после этого «жили самостоятельно», то необходимо использовать функцию копирования массивов mas2.CopyTo(mas1, i); элементы массива mas2 будут переданы в массив mas1 и размещены там, начиная с элемента с индексом i; размер массива mas1 должен быть достаточен для принятия копируемых элементов. Остальные элементы mas1 получат значение 0. В дальнейшем массивы mas1 и mas2 независимы.
Кроме этих, привычных во всех языках программирования, массивов в C# имеется еще одна их разновидность: ступенчатые (свободные, невыравненные, рваные) массивы: у них количество элементов в разных строках может быть различным.
Их объявление: double [ ] [ ] q;
Для их инициализации требуется сначала указать количество строк, а затем в цикле – количество элементов в каждой строке.
Рассмотрим это на примере. Дан ступенчатый массив. Вывести номера его строк, в которых доля положительных элементов максимальна.
float[][] b; //объявим неровный массив
b = new float[n][]; //определим количество строк
b[i] = new float[m]; // определим количество элементов в i-ой строке
56. Разработка консольных приложений на C#, организация ввода/вывода и преобразования данных. Структура программы.
Для создания новой программы в консольном режиме после запуска Studio 2005 необходимо:
· выбрать по очереди File – New – Project;
· выбрать язык реализации Visual C#, тип проекта Windows, Console Application;
· определить местонахождение нового проекта (Location) и дать ему имя (Name), в нашем случае ConsApp.
В ответ увидите следующую картину:
using System; //подключение стандартных библиотек
using System.Collections.Generic;
using System.Text;
namespace ConsApp
{
// здесь должны находиться созданные пользователем классы
class Program
{
// здесь должны быть функции пользователя при отсутствии классов
static void Main(string[] args)
{
// главная функция, здесь должны быть операторы
Console.WriteLine(“ Привет из Москвы “);
Console.ReadLine();
} } }
Программа начинается с области имен (ее имя мы определили при создании проекта), которая содержит созданный автоматически класс (Program), а в составе этого класса находится главная функция (Main). Наш пример содержит простейшую программу – традиционное приветствие. Заодно она показывает вывод символьных строк. Строка Console.ReadLine(); необходима, как и в других консольных приложениях, для задержки экрана пользователя после завершения программы. Как видите, ввод/вывод очень похож на Pascal. При отсутствии классов и функций пользователя весь текст программы находится в главной функции.
Для ввода/вывода в консольном режиме используют следующие методы класса Console: Write( выводимая строка ), WriteLine( выводимая строка ), ReadLine() – возвращает введенную строку. Важное обстоятельство: метод ReadLine всегда возвращает данные типа string, в случае необходимости их преобразования должны быть запрограммированы. Аргументом методов Write, WriteLine тоже должна быть символьная строка. Правда, здесь можно часто обойтись без явных преобразований. Разница между Write и WriteLine заключается в том, что после вывода строки WriteLine осуществляет автоматически переход на следующую строку на экране, Write этого не делает.