
- •Теоретические сведения: Проблемы разработки современных ис
- •Решение проблем разработки информационных систем в .Net
- •Общеязыковая исполняющая среда (Common Language Runtime)
- •Утилиты .Net Framework
- •Основные утилиты .Net Framework
- •Утилиты .Net Framework для отладки приложений
- •Утилиты .Net Framework по работе с защитой приложений
- •Утилиты .Net Framework для настройки и установки приложений
- •Сборки в среде clr
- •1 Общие сведения о сборках
- •2 Содержимое сборок
- •3 Манифест сборки
- •4 Размещение сборок
- •Visual Studio .Net – открытая среда разработки.
- •Среда Microsoft Visual c# 2005 Express Edition
- •Структура программы в c#.
- •Пример 1. Программа FirstProject
- •Пространство имен.
- •Создание и запуск проекта.
- •Практична робота № 2 Введення в Windows Forms
- •Ход работы (первой части лабораторного занятия).
- •Теоретические сведения:
- •Создание Windows-приложений
- •Окно кода программы
- •Роль класса Application
- •Свойства проекта
- •Запуск приложения
- •Что такое форма
- •Windows Forms в технологии .Net
- •Функциональные возможности класса Form
- •Цикл существования объекта Form
- •Диалог MessageBox
- •Закрытие формы (Выход из формы)
- •Создание mdi-приложений.
- •Стандартный делегат
- •1 Часть
- •2 Часть
- •Теоретические сведения.
- •Форматирование строки вывода.
- •Консольный ввод.
- •Расширяющее преобразование.
- •Сужающее преобразование
- •Метод Parse().
- •Класс System.Environment. Окружение.
- •Система типов
- •Простые (элементарные) типы
- •Перечисления
- •Структуры
- •Язык xml
- •Практична робота № 4 Огляд мови с #. Змінні. Структури мови Цель: освоить синтаксис языка программирования с#, закрепить практически использование структур языка. Ход выполнения работы:
- •Теоретические сведения. Базовый синтаксис с#
- •Литералы. Представление значений.
- •Арифметические литералы
- •Логические литералы
- •Символьные литералы
- •Символьные управляющие последовательности.
- •Строковые литералы
- •Переменные.
- •Объявление и инициализация.
- •Область видимости.
- •Константы
- •Операции и выражения
- •Контроль за переполнением. Checked и unchecked.
- •Операция is
- •Операция as
- •Особенности выполнения арифметических операций
- •Особенности арифметики с плавающей точкой
- •Управляющие операторы
- •Теоретические сведения: Иерархия классов. Понятие класса управляющих элементов.
- •Класс Control
- •Элемент управления TextBox
- •Класс Button
- •Элемент управления CheckBox
- •Переключатели и группирующие рамки
- •Элемент управления CheckedListBox
- •Комбинированные списки
- •Управляющий элемент ImageList
- •Элемент управления MonthCalendar
- •Элемент управления Panel
- •Порядок перехода по Tab
- •Форматирование элементов управления
- •Свойства Anchor и Dock
- •Всплывающие подсказки (ToolTips)
- •Создание меню
- •Главное меню.
- •Контекстное меню
- •Создание строки состояния
- •Создание пользовательского диалогового окна.
- •Стандартные диалоговые панели общего назначения.
- •II Задание Expression в таблице, используя визуальные средства разработки.
- •Теоретические сведения:
- •1 Класс DataSet.
- •1.1 Класс DataTable (таблицы)
- •1.1.1 Столбцы (объект Columns).
- •1.1.2 Строки (объект Row)
- •Добавление данных.
- •Заполнение полей.
- •Изменение данных.
- •Состояния строки.
- •Обработка событий
- •Привязка DataTable к некоторым элементам управления.
- •1.1.3 Ограничения (объект Constraints)
- •1.1.4 Представление (объект DataView).
- •1.2 Класс DataRelation (связи между таблицами)
- •2 Просмотр данных. Класс DataGridView.
- •Источники данных (DataSource).
- •2.1.1 Отображение данных из массива
- •2.1.2 Отображение данных из DataTable
- •2.1.3 Отображение данных из DataView
- •2.1.4 Отображение данных из класса DataSet
- •2.1.5 Отображение данных из массива
- •2.2 Привязка данных (DataBinding).
- •Простая привязка.
- •Объекты привязывающие данные (BindingContext)
- •3 Схемы xml.
- •3.1 Пример использования xml-формата для взаимодействия с xml Web-службами:
- •3.2 Ado.Net 2.0 тесно интегрировано с xml.
- •4 Xsd (xml Structure Defenitions) схема.
- •4.1 Описание.
- •4.2 Основные элементы
- •4.3 Использование Visual Studio 2005 .Net
- •4.3.1. Загрузка схем и данных в DataSet
- •4.3.2 Запись схемы и данных из DataSet
- •Практична робота № 7 Використання масивів і їх методів в c # Цель: овладеть возможностью использования массивов, строк и их методов.
- •Массив.
- •Объявление массивов Объявление одномерных массивов
- •Многомерные массивы
- •Пример использования массивов.
- •Массивы массивов
- •Встроенный сервис по обслуживанию массивов
- •Практична робота № 8 Використання колекцій в c # Цель: овладеть возможностью использования коллекций.
- •Коллекции.
- •ArrayList. Массив-список.
- •Практична робота № 9 Об'єкти і класи в с # Цель: четко разграничить понятия класса, объекта.
- •Поля класса
- •Методы класса
- •Объект.
- •Конструктор.
- •Деструктор.
- •Операция new
- •Вложенные классы.
- •Ссылки как параметры.
- •Оператор is
- •Оператор as
- •Переменные только для чтения и константы.
- •Ключевое слово static.
- •Практична робота № 10 Успадкування. Інкапсуляція. Поліморфізм Цель: практически освоить основные принципы ооп. Ход работи:
- •1 Часть. Изучение принципов наследования и инкапсуляции.
- •2 Часть. Изучение принципа полиморфизма.
- •Теоретические сведения.
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Виртуальные методы и работа с ними в производных класах.
- •Интерфейсы.
- •Практична робота № 11 Робота з файлами в с # Цель: овладеть возможностью считывания/записи данных из/в файл.
- •Потоки: байтовые, символьные, двоичные
- •Общая характеристика классов потоков
- •Класс Filestream
- •Открытие и закрытие файла.
- •Копирование файла.
- •Файловый ввод–вывод с ориентацией на символы.
- •Пример использования StreamWriter.
- •Пример использования StreamReader.
- •Пример перенаправления потоков.
- •Основні поняття, що використовуються при проектуванні діалогу.
- •Основна термінологія, що використовується при проектуванні вікон. Визначення вікон, типи вікон.
- •Спосіб проектування інтерфейсу користувача з орієнтацією на дані.
- •Спосіб проектування інтерфейсу користувача з орієнтацією на документи.
- •Вибір моделі інтерфейсу.
- •Розробка вікна.
- •Теоретичні відомості.
- •Поле вибору: визначення, стан, типи.
- •Поле вибору: представлення об’єктів, ідентифікація поля.
- •Поле вибору: курсор вибору, виділення обраного об’єкту, недоступність об’єкту вибору, черговість розташування, елементи настроювання.
- •Взаємодія користувача з полями вибору, первісні представлення, вхідний стан.
- •Поле введення: визначення, ідентифікація, роздільники, шрифт, правила читабельності.
- •Теоретичні відомості. Меню дій, спадаюче меню: призначення, розташування, обов’язкові опції, число опцій.
- •Послідовність опцій курсору.
- •Елементи настроювання і виклик опцій.
- •Особливості режимів роботи для одного користувача і багатьох користувачів.
- •Спливаюче меню.
- •Область функціональних клавіш.
- •Теоретичні відомості.
- •Область команд: розміщення, зміст, використання, правила запиту дії “Команда”.
- •Правила для дій “Витяг команди”, правила для дії “Підказка”.
- •Співвідношення між областю команд і меню дій.
- •Практична робота № 16 Створення графічних додатків в с #
- •Практична робота № 17 Створення графічних примітивів
Инкапсуляция
Инкапсуляция — основной принцип ООП.
Состоит из двух аспектов:
- объединение данных и функций по работе с этими данными в единую сущность (описание класса),
- контроль доступа к элементам этой сущности (использование модификаторов доступа).
Оба этих аспекта были подробно рассмотрены в предыдущей лабораторной работе.
Единственное, что осталось отметить – предоставление контроля над поведением объекта. Для этого вернемся к описанной абстракции «велосипед».
Если вы едите на велосипеде, то вам нужно поворачивать руль и крутить педали, и вы вряд ли знаете, какие подшипники используются для вращения колес (это тоже одно из свойств инкапсуляции).
Инкапсуляция дает контроль над поведеним объекта, но не более. Изменить атрибуты объекта возможно через предназначенный для этого интерфейс. Обычно, если вы хотите поменять колесо на велосипеде, то вы можете использовать для этого мастерскую.
Обычно считается правильным все данные в классе делать закрытыми извне, и если их необходимо изменять, то для этого предоставляют специальные методы.
Наследование
Предположим, вы описываете все тот же велосипед. А через некоторое время потребовалось описание абстракции «горный велосипед». У вас есть два варианта: либо написать все описание с нуля (используя предыдущие описания), либо сказать, что горный велосипед – это в первую очередь велосипед, но с характерными деталями (см. рисунок 10.1.).
Рисунок 10.1 – Принцип наследования.
В С# не поддерживается множественное наследование! (см. пример InherSchema). Однако, сюда добавлены интерфейсы, что позволяет создавать свой класс, реализовав в нем более чем один интерфейс.
Полиморфизм
Полиморфизм (от греческого слова polymorphism, означающего "много форм") — это качество, которое позволяет одному интерфейсу получать доступ к целому классу действий.
Концепцию полиморфизма часто выражают такой фразой: "один интерфейс — много методов". Это означает, что для выполнения группы подобных действий можно разработать общий интерфейс. Полиморфизм позволяет понизить степень сложности программы, предоставляя программисту возможность использовать один и тот же интерфейс для задания общего класса действий. Конкретное (нужное в том или ином случае) действие (метод) выбирается компилятором. Программисту нет необходимости делать это вручную. Его задача — правильно использовать общий интерфейс.
Предположим, что мы создали класс музыканта, на основе которого построили два класса: гитарист и виолончелист (см. рисунок 10.2.).
Горный велосипед
Рисунок 10. –. Принцип полиморфизма
Все музыканты умеют настраивать свои инструменты. Если мы хотим целый оркестр настроить свои инструменты, то нам проще обратиться ко всем музыкантам одновременно, а не отдельно ко всем гитаристам и ко всем виолончелистам. Полиморфизм позволяет вызвать именно ту функцию, которая необходима. То есть все музыканты начинают настраивать свои инструменты тем способом, который подходит для их инструментов, а не тем, которым умеет настраивать сам музыкант.
Виртуальные методы и работа с ними в производных класах.
В том случае, когда необходимо поддерживать концепцию полиморфизма при наследовании, выполняются два этапа:
1) определяется метод в базовом классе с ключевым словом virtual;
2) переопределить функцию в производном классе с ключевым словом override (при перегрузке метода в производном классе) или new (при скрытии реализации метода базового класса).
Другими словами, создадим базовый класс «Графический объект», методами которого являются его рисование и заливка (см. пример Virtuality):
class GraphObject
{
public void DrawSth()
{
Console.WriteLine("Draw object");
}
public virtual void FillSth()
{
Console.WriteLine("Fill object");
}
}
Будем наследовать этот класс в классе «Точка»:
class Point : GraphObject
{
public new void DrawSth()
{
Console.WriteLine("Draw point");
}
public override void FillSth()
{
Console.WriteLine("Fill point");
}
}
А в основной программе создаем экземпляр базового класса и класса – наследника:
static void Main(string[] args)
{
GraphObject a = new Point();
a.DrawSth();
a.FillSth();
Point b = new Point();
b.DrawSth();
b.FillSth();
}
Результатом выполнения этой программы будет:
Следовательно, полиморфизм поддерживается в случае заливки FillSth(), а в случае рисования DrawSth() - нет.
Для наглядности сведем выводы в таблицу на дополнительном примере:
|
Полиморфизм поддерживается |
Полиморфизм не поддерживается |
использование |
override |
new |
код программы |
class A { public virtual void Display() { Console.WriteLine("A"); } }
class B : A { public override void Display() { Console.WriteLine("B"); } } class Program { static void Main(string[] args) { B b = new B(); A a = b; b.Display(); a.Display(); } } |
class A { public void Display() { Console.WriteLine("A"); } }
class B : A { public new void Display() { Console.WriteLine("B"); } } class Program { static void Main(string[] args) { B b = new B(); A a = b; b.Display(); a.Display(); } } |
результат |
BB |
BA |
Модификатор new с виртуальными методами работает аналогично. Разница состоит в том, что при вызове обычных методов компилятор подставляет их вызов на этап компиляции, при вызове же виртуальных методов выбор метода происходит только на этапе выполнения.
При определении виртуального метода необходимо придерживаться некоторых правил:
метод должен содержать тело,
нельзя определить виртуальный метод как static,
виртуальный метод не может быть privatе, иначе его нельзя будет переопределить в производном классе.
При перегрузке метода тоже поддерживаются правила:
можно перегрузить только соответствующие методы с ключевым словом virtual,
перегруженный метод обязательно должен иметь реализацию в производном классе,
можно перегружать перегруженные методы, причем слово virtual указывается только в базовом классе,
нельзя определить метод со спецификатором override как virtual (перегруженный метод является виртуальным по умолчанию),
перегруженный метод не может быть определен как static или privatе.