- •Об’єктно-орієнтоване програмування
- •Содержание
- •Тема 1. Понития ооа, ооПр и ооп Лекция 1. Объектная модель и принципы ее организации
- •1. Понития ооа, ооПр и ооп и их отличия от подходов структурного проектирования
- •2. Основные понятия ооп
- •Тема 2. Основы программирования на языке с# .Net Лекция 2. Введение в программирование на с# .Net
- •1. Роль платформы .Net
- •2. Первая программа на c# и основные приемы работы в системе ms Visual Studio
- •3. Структура программы
- •4. Собственные пространства имен
- •Лекция 3. Система типов данных языка с#
- •1. Система типов данных языка с#
- •2. Преобразование типов
- •Лекция 4. Выражения и операторы языка с#
- •1. Выражения
- •2. Операторы
- •2.1. Операторы ввода и вывода
- •2.2. Операторы ветвления
- •2.3. Операторы цикла
- •2.3. Оператор безусловного перехода
- •Лекция 5. Массивы
- •1. Основные понятия
- •2. Одномерные массивы
- •3. Многомерные массивы
- •4. Класс Array
- •5. Класс Random
- •Лекция 6. Структуры и перечисления
- •1. Структуры
- •3. Перечисления
- •Лекция 7. Символы и строки
- •1. Символы char
- •2. Неизменяемые строки string
- •3. Изменяемые строки
- •Лекция 8. Файловая система
- •1. Основные сведения
- •2. Работа с каталогами
- •2.1. Абстрактный класс FileSystemInfo
- •2.2. Класс DirectoryInfo
- •2.3. Класс Directory
- •3. Работа с файлами
- •3.1. Класс Filelnfo
- •3.2. Класс File
- •Тема 3. Принципы парадигмы объектно-ориентированного программирования Лекция 9. Пронципы объектно-ориентированного программирования
- •1. Основные понятия
- •2. Роль инкапсуляции
- •3. Роль наследования
- •4. Роль полиморфизма
- •Лекция 10-11. Классы и объекты
- •1. Основные понятия
- •2. Функциональные элементы класса
- •2.1. Данные: поля и константы
- •2.2. Методы
- •2.3. Конструкторы
- •2.4. Деструкторы
- •2.5. Свойства
- •2.6. Индексаторы
- •3. «Один класс – один файл»
- •Лекция 12-13. Класы коллекций
- •1. Основные понятия
- •2. Класс Stack
- •3. Класс Queue
- •4. Класс ArrayList
- •Тема 4. Инкапсуляция и скрытие информации Лекция 14. Инкапсуляция как средство структурирования систем
- •1. Основные понятия
- •2. Основная концепция инкапсуляции
- •Тема 5. Перегрузка операторов и функций Лекция 15. Модификатор доступа переменных и функций
- •1. Основные понятия
- •2. Примеры использования модификаторов доступа
- •Лекция 16. Перегрузка операторов и функций
- •1. Операции класса
- •2. Унарные операции
- •3. Бинарные операции
- •4. Операции преобразования типов
- •Implicit operator целевой_тип (параметр) //неявное преобразование
- •Тема 6. Наследование и полное использование кода Лекция 17. Основы наследования
- •1. Иерархия классов
- •2. Основы наследования
- •3. Использование защищенного доступа
- •Лекция 18. Вызов базового конструктора
- •1. Наследование конструкторов
- •2. Вызов базового конструктора
- •Тема 7. Многоуровневое наследование. Конфликт имен и потоков классов Лекция 19-20. Многоуровневое наследование и его недостатки
- •1. Многоуровневая иерархия
- •2. Переменные базового класса и производного класса
- •3. Виртуальные методы
- •4. Абстрактные методы и классы
- •Лекция 21. Классы потоков вводв и вывода
- •1. Основные понятия
- •2. Стандартный поток ввода
- •3. Стандартный поток вывода
- •4. Стандартный поток вывода сообщений об ошибках
- •5. Программа StdStreams
- •Лекция 22. Классы потоков для работы с файлами, памятью и сетью
- •1. Класс BufferedStream
- •2. Класс FileStream
- •3. Класс MemoryStream
- •4. Класс NetworkStream
- •5. Класс CryptoStream
- •1. Основы полиморфизма
- •Тема 8. Полиморфизм и виртуальные функции Лекция 23. Основы полиморфизма и преимущества его использования
- •2. Преимущества использования полиморфизма
- •Лекция 24. Динамическое связывание виртуальных методов
- •1. Виртуальные методы
- •2. Вызов базового метода
- •Тема 9. Интерфейсы Лекция 25. Интерфейсы
- •1. Основные понятия
- •2. Пример опредиления интерфейса и работы с ним
- •Лекция 26. Стандартные интерфейсы .Net
- •1. Стандартный интерфейс iComparable
- •2. Перегрузка операций отношения с помощью метода CompareTo
- •3. Стандартные интерфейсы iEnumerable и iEnumerator
- •Тема 10. Объектно-ориентированное программирование Windows-приложений на основе WindowsForms Лекция 27-28. Библиотеки классов реализации функциональных возможностей Windows
- •1. Формы
- •6. Компиляция программы
- •7. События в Windows-приложениях
- •7.1. События мыши
- •Лекция 29. Разработка графических интерфейсов пользователя
- •1. Общтие сведения
- •2. Группы элементов управления
- •Лекция 30-31. Работа с даннями
- •1. Что такое реляционная база данных?
- •2. Модель объектов ado.Net
- •3. Подготовка ado.Net к работе в приложении
- •Лекция 32. Создание пакетов установки
- •1. Общие сведения
- •2. Создание пакетов установки
- •3.Создание простого пакета установки без библиотеки .Net Framework
2. Пример опредиления интерфейса и работы с ним
Рассмотрим интерфейс IDemo и его реализацию для классов DemoPoint и DemoLine //определение интерфейса
interface IDemo
{
void Show(); //объявление метода
double Dlina(); //объявление метода
int X {get;} //объявление свойства, доступного только для чтения
int this [int i]{get;set;} //объявление индексатора, доступного для чтения-записи
}
//класс DemoPoint наследует интерфейс IDemo
class DemoPoint:IDemo
{
protected int x;
protected int y;
public DemoPoint ( int x, int y) { this.x=x; this.y=y; }
public void Show() //реализация метода, объявленного в интерфейсе
{ Console.WriteLine("точка на плоскости: ({0}, {1})",x, y); }
public double Dlina() //реализация метода, объявленного в интерфейсе
{ return Math.Sqrt(x*x+y*y); }
public int X //реализация свойства, объявленного в интерфейсе
{ get { return x; } }
public int this [int i] //реализация индексатора, объявленного в интерфейсе
{
get
{
if (i==0) return x;
else if (i==1) return y;
else throw new Exception("недопустимое значение индекса");
}
set
{
if (i==0) x=value;
else if (i==1) y=value;
else throw new Exception ("недопустимое значение индекса");
}
}
}
//класс DemoShape наследует класс DemoPoint и интерфейс IDemo
class DemoShape : DemoPoint, IDemo
{
protected int z;
public DemoShape(int x, int y, int z):base(x, y)
{ this.z=z; }
// реализация метода, объявленного в интерфейсе, с сокрытием одноименного метода из базового класса
public new void Show()
{
Console.WriteLine("точка в пространстве: ({0}, {1}, {2})", x, y, z);
}
// реализация метода, объявленного в интерфейсе, с сокрытием одноименного метода из базового класса
public new double Dlina()
{ return Math.Sqrt(x*x+y*y+z*z); }
// реализация индексатора, объявленного в интерфейсе, с сокрытием одноименного индексатора из базового класса
public new int this [int i]
{
get
{
if (i==0) return x;
else if (i==1) return y;
else if (i==2) return z;
else throw new Exception ("недопустимое значение индекса");
}
set
{
if (i==0) x=value;
else if (i==1) y=value;
else if (i==2) z=value;
else throw new Exception ("недопустимое значение индекса");
}
}
}
class Program
{
static void Main()
{
//создание массива интерфейсных ссылок
IDemo []a =new IDemo[4];
//заполнение массива
a[0]=new DemoPoint(0,1);
a[1]=new DemoPoint(-3, 0);
a[2]=new DemoShape(3,4,0);
a[3]= new DemoShape(0,5, 6);
//просмотр массива
foreach (IDemo x in a)
{
x.Show();
Console.WriteLine("Dlina={0:f2}",x.Dlina());
Console.WriteLine("x="+x.X);
x[1]+=x[0];
Console.Write("новые координаты - ");
x.Show();
Console.WriteLine();
}
}
}
Обратите внимание, что в интерфейсе IDemo было объявлено свойство Х, доступное только для чтения. Наследуя интерфейс IDemo, класс DemoPoint определил реализацию данного свойства. Класс DemoShape, наследуя класс DemoPoint и IDemo, не предложил собственной реализации свойства Х, поэтому при обращении к объекту типа DemoShape вызывается реализация данного свойства, определенная в базовом классе.
Контрольные вопросы:
Что понимается под термином «интерфейс»?
Чем отличается синтаксис интерфейса от синтаксиса абстрактного класса?
Какие объекты языка C# могут быть членами интерфейсов?
