Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Вопрос№2Методология объектно-ориентированного программирования.↑ Стр 1 из 11Следующая ⇒ Содержание книги
Поиск на нашем сайте
Вопрос№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; просмотров: 443; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.227.187 (0.018 с.) |