Вопрос№2Методология объектно-ориентированного программирования. 


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



ЗНАЕТЕ ЛИ ВЫ?

Вопрос№2Методология объектно-ориентированного программирования.



Вопрос№2Методология объектно-ориентированного программирования.

Увеличение размеров программ приводило к необходимости привлечения большего числа программистов, что, в свою очередь, потребовало дополнительных ресурсов для организации их согласованной работы. В процессе разработки приложений заказчик зачастую изменял функциональные требования, что еще более усложняло процесс создания программного обеспечения. Но не менее важными оказались качественные изменения, связанные со смещением акцента использования компьютеров. В эпоху "больших машин" основными потребителями программного обеспечения были такие крупные заказчики, как большие производственные предприятия, финансовые компании, государственные учреждения. Стоимость таких вычислительных устройств для небольших предприятий и организаций была слишком высока. Позже появились персональные компьютеры, которые имели гораздо меньшую стоимость и были значительно компактнее. Это позволило широко использовать их в малом и среднем бизнесе. Основными задачами в этой области являются обработка данных и манипулирование ими, поэтому вычислительные и расчетно-алгоритмические задачи с появлением персональных компьютеров отошли на второй план. Как показала практика, традиционные методы процедурного программирования не способны справиться ни с нарастающей сложностью программ и их разработки, ни с необходимостью повышения их надежности. Во второй половине 80-х годов возникла настоятельная потребность в новой методологии программирования, которая была бы способна решить весь этот комплекс проблем. Ею стало объектно-ориентированное программирование (ООП). После составления технического задания начинается этап проектирования, или дизайна, будущей системы. Объектно-ориентированный подход к проектированию основан на представлении предметной области задачи в виде множества моделей для независимой от языка разработки программной системы на основе ее прагматики. Последний термин нуждается в пояснении. Прагматика определяется целью разработки программной системы, например, обслуживание клиентов банка, управление работой аэропорта, обслуживание чемпионата мира по футболу и т.п. В формулировке цели участвуют предметы и понятия реального мира, имеющие отношение к создаваемой системе. При объектно-ориентированном подходе эти предметы и понятия заменяются моделями, т.е. определенными формальными конструкциями.
Модель содержит не все признаки и свойства представляемого ею предмета или понятия, а только те, которые существенны для разрабатываемой программной системы. Таким образом, модель "беднее", а следовательно, проще представляемого ею предмета или понятия. Простота модели по отношению к реальному предмету позволяет сделать ее формальной. Благодаря такому характеру моделей при разработке можно четко выделить все зависимости и операции над ними в создаваемой программной системе. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере. Объектно-ориентированный подход обладает такими преимуществами, как:

 уменьшение сложности программного обеспечения;

 повышение надежности программного обеспечения;

 обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

 обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

Вопрос№2.Основные понятия

Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.Каждый объект имеет определенное время жизни. В процессе выполнения программы могут создаваться новые объекты или уничтожаться существующие.Программа написанная с помощью ООП обычно состоит из множества объектов и все эти объекты взаимодействуют друг с другом. Активность объектов проявляется в том,что они взаимодействуют друг с другом, вызывая методы у друг друга либо получая сообщения друг другу. Внешний интерфейс объекта или набор его методов- это описание какие сообщения он может получать.

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

Поведение-это действие и реакция объектов,выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта.

Уникальность-это то,что отличает один объект от другого.Уникальность объекта состоит в том.что всегда можно определить указывают ли 2 ссылки на один и тот же объект или на разные объекты. Объединение объектов в классы позволяет рассмотреть задачу в более общей постановке.

У класса две различные роли: модуль и тип данных. Класс – это модуль, т.е. архитектурная единица для построения программных систем. В ООП программная система, которая строиться по модульному принципу, строиться из классов являющихся основным видом модуля. Вторая роль класса не менее важна. Класс - это тип данных, задающий реализацию некоторой абстракции, характерные для задач, в интересах которой создается программная система.

Синтаксис описания класса: [атрибуты][модификаторы]class имя класса [:список родителей] {тело класса}Типы отношений между классами: Классы не могут обмениваться информацией используя глобальные переменные. Между классами обмен осуществляется способами стандартными для объектного подхода. Между классами могут существовать два типа отношений: 1- клиентские 2- наследование.

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

Public class Employee

{

Public int age

Public void Increase Age()

{

Age ++

}

}

Наследование в ООП позволяет создавать новый класс на основе существующего класса. Свойства и функциональность сущ класса наследуется новым классом. В новом классе в часть унаследов. Функц. Можно ввести изменения. Новый класс-производный,класс-потомок,существующий класс-базовый,класс-предок.

Public class Base Class

{

Public void DoBase()

{

CW («выз.метод базового класса)

}

}

Public class Derived class:Baseclass

{

Public void DoDerived()

{

CW («вызывается метод произвольного класса»)

}

}

Полиморфизм-способность принимать несколько форм. «Один интерфейс-несколько методов» Полиморфизм может быть реализован с помощью наследования.

Пример:

public class Worker: Man

{

//Виртуальный метод

public virtual void GiveMoney(int money)

{

Console.WriteLine("Получите "+money+" рублей");

}

}

 

public class Teacher: Worker

{

//Задаем необходимую функциональность

public override void GiveMoney(int money)

{

int bonus = 1000; //премиальные 1000 руб

money = money + bonus;

base.GiveMoney(money);

}

}

В первых ЯП понятие класса отсутствовало рассм только типы данных.При определении типа задавалось только множество возможных значений кот могут принимать переменные этого типа.С# наследовал основные типы от С++ были добавлены новые типы и уточнены новые типы С++.С# является строго типизированным языком.Все операции пров. Компилятором на соотв типов не компилируются.У каждой переменной должен быть тип.в C# типы делятся на примитивные и пользовательские. Типы подразделяются на статические и динамические для данных статического типа память им отводится в момент ответвления.Для данных динамического типа размер данных в момент объявления не известен и память им выделяется динамически по запросу во время выполнения программы. Примитивные типы поддерж компилятором напрямую т.е существуют инструкции для работы с этими типами.Сущ 15 примит типов.Среди них 9 целочисленных типов. Примитивные типы(byte,int,unint,short,ushort,long,ulong) Unicode (float,double,bool.object,string,decimal)Примитивные типы допускают явные и неявные преобразования. Неявные преобразования допускаются когда у нас не теряется информация о значении может быть потеряна допускаются только явные преобразования.

Вопрос№4 Консольный проект

Среда разработки и консольное приложение, построенное по умолчанию.

Есть три окна, В окне Solution Explorer представлена структура построенного решения. В окне Properties можно увидеть св-ва выбранного элемента решения. В окне документов отображается выбранный документ программный код класса проекта. В этом окне можно отображать и др. документы, список которых показан в верхней части окна.Проект включает в себя папку со ссылками на системные пространства имен из библиотеки FCL, файл со значком приложения и два файла с уточнением cs. Файл

AssemblyInfo содержит инф., используемую в сборке, а файл со стандартным именем Class1 явл-ся построенным по умолчанию классом, который задает точку входа - процедуру Main, содержащую для данного типа проекта только комментарий.

Класс проекта погружен в пространство имен, имеющее по умолчанию то же имя, что и решение, и проект.Пространству имен может предшествовать одно или несколько предложений using, где после ключевого слова следует название пространства имен - из библиотеки FCL или из проектов, связанных с текущим проектом. Задается пространство имен System - основное пространство имен библиотеки FCL.Все языки допускают комментарии. В C# допускаются однострочные и многострочные комментарии. Первые начинаются с двух символов косой черты. Весь текст до конца строки, следующий за этой парой символов, воспринимается как комментарий, не влияющий на выполнение программного кода. Началом многострочного комментария является пара символов /*, а концом - */. Процедура Main. Ее заголовок можно безболезненно упростить, удалив аргументы, которые, как правило, не задаются. Они имеют смысл, когда проект вызывается из командной строки. Таков консольный проект, построенный по умолчанию. Функциональности у него немного. Его можно

скомпилировать, выбрав соответствующий пункт из меню build. Если компиляция прошла без ошибок, то в результате будет произведена сборка и появится PE-файл в соответствующей папке Debug нашего проектa. Приложение можно запустить нажатием соответствующих клавиш (например, CTRL+F5) В результате выполнения появится консольное окно с предложением нажать любую клавишу для закрытия окна.

Вопрос№5 Система типов языка С#. Типы данных принято разделять на простые и сложные, в зависимости от того, как устроены эти типы. У простых скалярных типов возможное значение данных едины и неделимы. Сложные типы характеризуются способом структуризации данных.

Встроенные типы- которые встроенные в языки программирования. В их основе лежит базисная система типов.Пользовательский тип- строиться на основе базисных типов.

Типы данных делятся на статические и динамические. Для статических данных память отводиться в момент их определения. Для всех типов вводиться деление на значимые и ссылочные. Для значимых типов значение переменной(объекта) является неотъемлемой собственностью переменной. Для ссылочных типов значением служит ссылка не некоторый объект в памяти, которая расположена обычно в динамической памяти «в куче».Стандарт С++ включает набор фундаментальных типов:1- логический (bool). 2- символьный (char) 3- целые типы. Они могут быть одного из трех размеров – short, int, long, сопровождаемые описанием, которое указывает, как интегрируется значение- со знаком или без. 4- типы с плавающей точкой. Эти типы могут быть одного из трех размеров float, double, long double. 5- Тип void используется для указания на отсутствие информации. 6- int это типизированный указатель на переменную типа int. 7- Ссылки (double &типизированный указатель на переменную типа double)

8- Массивы (char[]- массив элементов типа char) 9- Перечислимые типы (enum) для предоставления значений из конкретного множества. 10- Стркутуры(struct). 11-Классы.

Данная классификация была принята в С++ и была перенесена в С #. Однако в С # используется и другая классификация: 1- типы значения или значимые типы(value) К ним отсосятся: логический(bool), арифметический, структуры, перечисления. 2- ссылочный тип (reference) К ним относятся массивы, строки и классы. 3- указательный тип (pointer). 4- void(без значения).

Вопрос№6 Категории типов языка С#.

1- типы значения или значимые типы(value) К ним отсосятся: логический(bool), арифметический, структуры, перечисления. 2- ссылочный тип (reference) К ним относятся массивы, строки и классы. 3- указательный тип (pointer). 4- void(без значения).

Для ссылочного типа значения задает ссылку на область в «куче». Для значимого типа int х = 10 особый статус имеет void, который указывает на отсутствие какого- либо значения. Указатели имеют ограниченную область действия, и могут использоваться в небезопасных блоках.

Вопрос№7 Преобразования типов. Необходимость преобразования типов возникает в выражениях присваивания, замена формального методами фактическими. y=(х^2 + z^2)^2 * u; int x,z,u; flat y; Поскольку операции над ссылочными типами не определены (исключением являются строки операции над ними, в том числе присваивание выполняется так же как над значимыми типами.) то необходимость в них возникает только при присваиваниях и вызовах метода. При присваиваниях (замена аргумента) тип источника должен быть согласован с типом цели. В случае согласования типов ссылочная переменная цели связывается с объектом источника, ее тип динамически изменяется, становясь типом источника. Это преобразование осуществляется не явно. Если же тип цели является потомком типа источника, то неявное преобразование отсутствует.

 

Вопрос№8.Преобразования внутри ариф. типа.

 
 

Арифм. тип распадается на 11 подтипов.

Если задан путьстрелками от типа А к типу В, то это означ. существование неявного преобразования из типа А в тип В. Все остальные преобразования между подтипами ариф. типа существуют, но яв-ся явными. Существование длинного пути говорит лишь о существованиии неявного преобразования и оно выполняется только 1 раз.

Иногда возникает ситуация, при кот. для одного типа источника может существовать несколько типов назначения и необходимо осуществить выбор цели тип назначения. Такие проблемы выборавозникают при работе с перегруженными методами в классах.

Пусть существует 2 и более реализаций перегруженного метода, кот. отличаются типом формального аргумента. Тогда при вызове этого метода с аргументом типа Т может возникнуть проблема, какую реализацию метода выбрать. Поскольку для нескольких реализаций может быть допустимым преобразование аргуметна типа Т. Тип заданный формальным аргументом данной реализации метода.

Правило выбора: выбирается та реализация, которой ауть короче(в данной диаграмме).

Вопрос 19. Класс String.

 

Основным типом при работе со строками является тип string, задающий строки переменной длины. Класс String в языке C# относится к ссылочным типам. Над строками – объектами этого класса - определен широкий набор операций, соответствующий современному представлению о том, как должен быть устроен строковый тип.

Объекты класса String объявляются как все прочие объекты простых типов - с явной или отложенной инициализацией, с явным или неявным вызовом конструктора класса.

Чаще всего, при объявлении строковой переменной конструктор явно не вызывается, а инициализация задается строковой константой. Но у класса Sring достаточно много конструкторов. Они позволяют сконструировать строку из:

символа, повторенного заданное число раз;

массива символов char[];

части массива символов.

Над строками определены следующие операции:

присваивание (=);

две операции проверки эквивалентности (==) и (!=);

конкатенация или сцепление строк (+);

взятие индекса ([]).

Начнём с присваивания, имеющего важную особенность. Поскольку string - это ссылочный тип, то в результате присваивания создается ссылка на константную строку, хранимую в "куче". С одной и той же строковой константой в "куче" может быть связано несколько переменных строкового типа. Но эти переменные не являются псевдонимами - разными именами одного и того же объекта. Дело в том, что строковые константы в "куче" не изменяются (о неизменяемости строкового типа будем далее говорить подробно), поэтому когда одна из переменных получает новое значение, она связывается с новым константным объектом в "куче". Остальные переменные сохраняют свои связи. Для программиста это означает, что семантика присваивания строк аналогична семантике значимого присваивания.

В отличие от других ссылочных типов операции, проверяющие эквивалентность, сравнивают значения строк, а не ссылки. Эти операции выполняются как над значимыми типами.

Бинарная операция "+" сцепляет две строки, приписывая вторую строку к хвосту первой.

Возможность взятия индекса при работе со строками отражает тот приятный факт, что строку можно рассматривать как массив и получать без труда каждый ее символ. Каждый символ строки имеет тип char, доступный только для чтения, но не для записи.

Статические методы и свойства класса String.

Empty Возвращается пустая строка. Свойство со статусом read only.

Compare Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. При этом можно учитывать или не учитывать регистр, особенности национального форматирования дат, чисел и т.д.

CompareOrdinal Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. Сравниваются коды символов.

Concat Конкатенация строк. Метод перегружен, допускает сцепление произвольного числа строк.

Copy Создается копия строки.

Format Выполняет форматирование в соответствии с заданными спецификациями формата.

Ниже приведено более полное описание метода.

Intern, IsIntern Отыскивается и возвращается ссылка на строку, если таковая уже хранится во внутреннем пуле данных. Если же строки нет, то первый из методов добавляет строку во внутренний пул, второй - возвращает null. Методы применяются обычно тогда, когда строка создается с использованием построителя строк - класса StringBuilder.

Join Конкатенация массива строк в единую строку. При конкатенации между элементами

массива вставляются разделители. Операция, заданная методом Join, является

обратной к операции, заданной методом Split. Последний является динамическим

методом и, используя разделители, осуществляет разделение строки на элементы.

Методы Join и Split.

Заданный строкой текст зачастую представляет собой совокупность структурированных элементов - абзацев, предложений, слов, скобочных выражений и т.д. При работе с таким текстом необходимо разделить его на элементы, пользуясь специальными разделителями элементов, - это могут быть пробелы, скобки, знаки препинания. Практически подобные задачи возникают постоянно при работе со структурированными текстами. Методы Split и Join облегчают решение этих задач.

Динамический метод Split, как обычно, перегружен. Наиболее часто используемая реализация имеет следующий синтаксис:

public string[] Split(params char[])

На вход методу Split передается один или несколько символов, интерпретируемых как разделители.

Объект string, вызвавший метод, разделяется на подстроки, ограниченные этими разделителями. Из этих подстрок создается массив, возвращаемый в качестве результата метода. Другая реализация позволяет ограничить число элементов возвращаемого массива.

Синтаксис статического метода Join таков:

public static string Join(string delimiters, string[] items)

В качестве результата метод возвращает строку, полученную конкатенацией элементов массива items, между которыми вставляется строка разделителей delimiters. Как правило, строка delimiters состоит из одного символа, который и разделяет в результирующей строке элементы массива items; но в отдельных случаях ограничителем может быть строка из нескольких символов.

Вопрос№20.Изменяемые и неизменяемые строковые классы. Неизменяемый класс string. В языке C# существует понятие неизменяемый (immutable) класс. Для такого класса невозможно изменить значение объекта при вызове его методов. Динамические методы могут создавать новый объект, но не могут изменить значение существующего объекта. К таким неизменяемым классам относится и класс String. Ни один из методов этого класса не меняет значения существующих объектов. Конечно, некоторые из методов создают новые значения и возвращают в качестве результата новые строки. Невозможность изменять значения строк касается не только методов. Аналогично, при работе со строкой как с массивом разрешено только чтение отдельных символов, но не их замена. Статические свойства и методы класса String.1. Empty - Возвращается пустая строка. Свойство со статусом read only 2.Compare - Сравнение двух строк. Метод перегружен. Реализации метода позволяют сравнивать как строки, так и подстроки. При этом можно учитывать или не учитывать регистр, особенности национального форматирования дат, чисел и т.д. 3.Copy -Создается копия строки 4. Format - Выполняет форматирование в соответствии с заданными спецификациями формата.

Вопрос№30. Интерфейсы

интерфейс- это частный случай класса. Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. От абстрактного класса интерфейс отличается некоторыми деталями в синтаксисе и поведении. Синтаксическое отличие состоит в том, что методы интерфейса объявляются без указания модификатора доступа. Отличие в поведении заключается в более жестких требованиях к потомкам.Класс, наследующий интерфейс, обязан полностью реализовать все методы интерфейса. В этом -отличие от класса, наследующего абстрактный класс, где потомок может реализовать лишь некоторые методы родительского абстрактного класса, оставаясь абстрактным классом. Но, конечно, не ради этих отличий были введены интерфейсы в язык C#. У них значительно более важная роль.Введение в язык частных случаев усложняет его и свидетельствует о некоторых изъянах, для преодоления которых и вводятся частные случаи. Например, введение структур в язык C# позволило определять классы как развернутые типы. Конечно, проще было бы ввести в объявление класса соответствующий модификатор, позволяющий любой класс объявлять развернутым. Интерфейсы позволяют частично справиться с таким существенным недостатком языка, как отсутствие множественного наследования классов. Хотя реализация множественного наследования встречается с рядом проблем, его отсутствие существенно снижает выразительную мощь языка. В языке C# полного множественного наследования классов нет. Чтобы частично сгладить этот пробел, допускается

множественное наследование интерфейсов. Обеспечить возможность классу иметь несколько родителей- один полноценный класс, а остальные в виде интерфейсов,- в этом и состоит основное назначение интерфейсов.Отметим одно важное назначение интерфейсов. Интерфейс позволяет описывать некоторые желательные свойства, которыми могут обладать объекты разных классов. В библиотеке FCL имеется большое число подобных интерфейсов, с некоторыми из них мы познакомимся в этой лекции. Все классы, допускающие сравнение своих объектов, обычно наследуют интерфейс IComparable, реализация которого позволяет сравнивать объекты не только на равенство, но и на "больше","меньше".Класс реализует методы интерфейса, делая их открытыми для клиентов класса и наследников. Другая стратегия реализации состоит в том, чтобы все или некоторые методы интерфейса сделать закрытыми.Для реализации этой стратегии класс, наследующий интерфейс, объявляет методы без модификатора доступа, что по умолчанию соответствует модификатору private, и уточняет имя метода именем интерфейса. Метод нтерфейса со своим именем закрывается, а потом открывается под тем именем, которое класс выбрал для него. Создать объект класса интерфейса обычным путем с использованием конструктора и операции new нельзя. Тем не менее, можно объявить объект интерфейсного класса и связать его с настоящим объектом путем приведения (кастинга) объекта наследника к классу интерфейса. Это преобразование задается явно. Имея объект, можно вызывать методы интерфейса - даже если они закрыты в классе,для интерфейсных объектов они являются открытыми. При множественном наследовании классов возникает ряд проблем. Они остаются и при множественном наследовании интерфейсов, хотя становятся проще. Рассмотрим две основные проблемы – коллизию имен и наследование от общего предка.наследники не должны требовать изменений своих родителей - они сами должны меняться.Переименование методов интерфейсов иногда невозможно чисто технически, если интерфейсы являются встроенными или поставляются сторонними фирмами. К счастью, мы знаем, как производить переименование метода интерфейса в самом классе наследника. для этого достаточно реализовать методы разных интерфейсов как закрытые, а затем открыть их с переименованием.Отношение порядка на объектах класса Person задается как отношение порядка на фамилиях персон.Так как строки наследуют интерфейс IComparable, то для фамилий персон вызывается метод CompareTo, его результат и возвращается в качестве результата метода CompareTo для персон. Если аргумент метода не будет соответствовать нужному типу, то выбрасывается исключение со специальным уведомлением.Введем теперь в нашем классе Person перегрузку операций отношения.

 

Вопрос№31.Делегаты. Делегат – это класс.Объявление класса делегата начинается ключ. словом delegate и выглядит следующим образом: ОбъявлениеКлассаДелегата::=[СпецификаторДоступа] delegate СпецификаторВозвращаемогоЗначения ИмяКлассаДелегата (СписокПараметров); При этом СпецификаторВозвращаемогоЗначения::= ИмяТипа ИмяКлассаДелегата::= Идентификатор а синтаксис эл-та СписокПараметров аналогичен списку параметров функции. Но сначала – примеры объявления классов делегатов: delegate int ClassDelegate(int key); delegate void XXX(int intKey, float fKey); Подобие объявления класса-делегата и заголовка функции не случайно. Класс-делегат способен порождать объекты. При этом назначение объекта — представителя класса-делегата заключается в представлении методов (функций-членов) РАЗЛИЧНЫХ классов. Любой класс-делегат наследует System.MulticastDelegate. Это обстоятельство определяет многоадресность делегатов: в ходе выполнения приложения объект-делегат способен запоминать ссылки на произвольное количество функций независимо от их статичности или нестатичности и принадлежности классам. Св-ва и методы классов-делегатов.1. Method — Возвращ. имя метода, на кот. указывает делегат.2. Target- Возвращает имя класса, если делегат указывает на нестатический метод класса. Возвращает знач-е типа null, если делегат указ-ет на статич. Метод. 3. Combine(), operator+(), operator+=(), operator–(), operator–=()- Фун-я и операторные функции. Обеспеч. реализацию многоадресного делегата. 4. GetInvocationList() -Основываясь на внутреннем списке ссылок на функции, строится соответствующий массив описателей типов функций. 5. object DynamicInvoke (object[]args) -В соответствии со списком ссылок обеспечивается выполнение функций, на которые был настроен делегат 6. static Remove()- Статич. метод, обеспеч. удаление эл-ов внутреннего списка ссылок на функции.

Вопрос№43Атрибуты

Атрибуты предоставляют универсальные средства связи данных (в виде аннотаций) с типами, определенными на С#. Вы можете применять их для определения информации периода разработки (например, документации), периода выполнения (например, имя столбца БД) или даже характеристик поведения периода выполнения (например, может ли данный член участвовать в транзакции). Возможности атрибутов бесконечны. Поскольку вы можете создавать атрибуты на основе любой информации, существует стандартный механизм определения самих атрибутов и запроса членов или типов в период выполнения как связанных с ними атрибутов.Лучше объяснить использование атрибутов на примере. Допустим, у вас есть приложение, хранящее некоторые данные в реестре. Одна из проблем разработки связана с выбором места хранения информации о разделе реестра. В большинстве сред разработки она, как правило, хранится в файле ресурсов, в константах или даже жестко запрограммирована в вызовах API реестра. Однако мы снова имеем ситуацию, когда неотъемлемая часть класса хранится отдельно от определения остальной части класса. Атрибуты позволяют "прикреплять" эту информацию к членам класса, получая полностью самоописывающийся компонент. Вот пример, иллюстрирующий, как это может выглядеть, если предположить, что атрибут RegistryKey уже определен:

class MyClass {

[RegistryKey(HKEY_CURRENT_USER, "foo")] public int Foo; }Чтобы прикрепить определенный атрибут к типу или члену С#, нужно просто задать данные атрибута в скобках перед целевым типом или членом. В нашем примере мы прикрепили атрибут RegistryKey к полю MyClass.Foo. Как вы вскоре увидите, все, что нам надо сделать в период выполнения, — это запросить значение поля, связанное с разделом реестра и использовать его, чтобы сохранить дату в реестре.Определение атрибутов В предыдущем примере синтаксис прикрепления атрибута к типу или члену похож на тот, что применяется при создании экземпляра класса. Дело в том, что атрибут на самом деле является классом, производным от базового класса System.Attribute.

 


 

Вопрос№2Методология объектно-ориентированного программирования.

Увеличение размеров программ приводило к необходимости привлечения большего числа программистов, что, в свою очередь, потребовало дополнительных ресурсов для организации их согласованной работы. В процессе разработки приложений заказчик зачастую изменял функциональные требования, что еще более усложняло процесс создания программного обеспечения. Но не менее важными оказались качественные изменения, связанные со смещением акцента использования компьютеров. В эпоху "больших машин" основными потребителями программного обеспечения были такие крупные заказчики, как большие производственные предприятия, финансовые компании, государственные учреждения. Стоимость таких вычислительных устройств для небольших предприятий и организаций была слишком высока. Позже появились персональные компьютеры, которые имели гораздо меньшую стоимость и были значительно компактнее. Это позволило широко использовать их в малом и среднем бизнесе. Основными задачами в этой области являются обработка данных и манипулирование ими, поэтому вычислительные и расчетно-алгоритмические задачи с появлением персональных компьютеров отошли на второй план. Как показала практика, традиционные методы процедурного программирования не способны справиться ни с нарастающей сложностью программ и их разработки, ни с необходимостью повышения их надежности. Во второй половине 80-х годов возникла настоятельная потребность в новой методологии программирования, которая была бы способна решить весь этот комплекс проблем. Ею стало объектно-ориентированное программирование (ООП). После составления технического задания начинается этап проектирования, или дизайна, будущей системы. Объектно-ориентированный подход к проектированию основан на представлении предметной области задачи в виде множества моделей для независимой от языка разработки программной системы на основе ее прагматики. Последний термин нуждается в пояснении. Прагматика определяется целью разработки программной системы, например, обслуживание клиентов банка, управление работой аэропорта, обслуживание чемпионата мира по футболу и т.п. В формулировке цели участвуют предметы и понятия реального мира, имеющие отношение к создаваемой системе. При объектно-ориентированном подходе эти предметы и понятия заменяются моделями, т.е. определенными формальными конструкциями.
Модель содержит не все признаки и свойства представляемого ею предмета или понятия, а только те, которые существенны для разрабатываемой программной системы. Таким образом, модель "беднее", а следовательно, проще представляемого ею предмета или понятия. Простота модели по отношению к реальному предмету позволяет сделать ее формальной. Благодаря такому характеру моделей при разработке можно четко выделить все зависимости и операции над ними в создаваемой программной системе. Это упрощает как разработку и изучение (анализ) моделей, так и их реализацию на компьютере. Объектно-ориентированный подход обладает такими преимуществами, как:

 уменьшение сложности программного обеспечения;

 повышение надежности программного обеспечения;

 обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

 обеспечение возможности повторного использования отдельных компонентов программного обеспечения.

Вопрос№2.Основные понятия

Объект — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.Каждый объект имеет определенное время жизни. В процессе выполнения программы могут создаваться новые объекты или уничтожаться существующие.Программа написанная с помощью ООП обычно состоит из множества объектов и все эти объекты взаимодействуют друг с другом. Активность объектов проявляется в том,что они взаимодействуют друг с другом, вызывая методы у друг друга либо получая сообщения друг другу. Внешний интерфейс объекта или набор его методов- это описание какие сообщения он может получать.

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

Поведение-это действие и реакция объектов,выраженные в терминах передачи сообщений и изменения состояния; видимая извне и воспроизводимая активность объекта.

Уникальность-это то,что отличает один объект от другого.Уникальность объекта состоит в том.что всегда можно определить указывают ли 2 ссылки на один и тот же объект или на разные объекты. Объединение объектов в классы позволяет рассмотреть задачу в более общей постановке.

У класса две различные роли: модуль и тип данных. Класс – это модуль, т.е. архитектурная единица для построения программных систем. В ООП программная система, которая строиться по модульному принципу, строиться из классов являющихся основным видом модуля. Вторая роль класса не менее важна. Класс - это тип данных, задающий реализацию некоторой абстракции, характерные для задач, в интересах которой создается программная система.

Синтаксис описания класса: [атрибуты][модификаторы]class имя класса [:список родителей] {тело класса}Типы отношений между классами: Классы не могут обмениваться информацией используя глобальные переменные. Между классами обмен осуществляется способами стандартными для объектного подхода. Между классами могут существовать два типа отношений: 1- клиентские 2- наследование.

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

Public class Employee

{

Public int age

Public void Increase Age()

{

Age ++

}

}

Наследование в ООП позволяет создавать новый класс на основе существующего класса. Свойства и функциональность сущ класса наследуется новым классом. В новом классе в часть унаследов. Функц. Можно ввести изменения. Новый класс-производный,класс-потомок,существующий класс-базовый,класс-предок.

Public class Base Class

{

Public void DoBase()

{

CW («выз.метод базового класса)

}



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 361; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.193.232 (0.099 с.)