- •Об’єктно-орієнтоване програмування
- •Содержание
- •Тема 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
- •Тема 8. Полиморфизм и виртуальные функции Лекция 23. Основы полиморфизма и преимущества его использования
- •1. Основы полиморфизма
- •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
3.2. Класс File
Доступ к физическим файлам можно получать и через статические методы класса File. Большинство методов объекта Fileinfo представляют в этом смысле зеркальное отражение методов объекта File.
static void Main(string[] args)
{
File.Copy(@"d:\letter\letter1.txt",@"d:\bmp\letter1.txt");
Directory.CreateDirectory(@"d:\prim\archives");
File.Move(@"d:\letter\letter1.txt",@"d:\archives\letter1.txt");
File.Delete(@"d:\prim\letter\letter2.txt");
Directory.Delete(@"d:\prim\letter");
}
Имеет прямой смысл использовать статический класс File, когда требуется осуществить единственный вызов метода на объект. В этом случае вызов будет выполнен быстрее, поскольку .NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода. Однако если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.
Аналогичное правило действует и при выборе между классами Directory и DirectoryInfo.
Контрольные вопросы:
Какой класс используется для считывания символов из файла?
Какой класс применяется для записи символов?
Зачем нужны отдельные символьные классы впода/иывола?
Для чего используются классы StreamWriter и StreamReader?
Для чего используется класс IOException?
Для чего используется класс StringBuilder? В чем его отличия от класса String?
Тема 3. Принципы парадигмы объектно-ориентированного программирования Лекция 9. Пронципы объектно-ориентированного программирования
План:
Основные понятия
Роль инкапсуляции
Роль наследования
Роль полиморфизма
1. Основные понятия
Все основанные на объектах языки (C#, Java, С++, Smalltalk, Visual Basic и т.п.) должны отвечать трем основным принципам объектно-ориентированного программирования (ООП), которые перечислены ниже:
Инкапсуляция. Как данный язык скрывает детали внутренней реализации объектов и предохраняет целостность данных?
Наследование. Как данный язык стимулирует многократное использование кода?
Полиморфизм .Как данный язык позволяет трактовать связанные объекты сходным образом?
Прежде чем погрузиться в синтаксические детали реализации каждого принципа, важно понять базовую роль каждого из них.
2. Роль инкапсуляции
Инкапсуляция – это механизм программирования, объединяющий вместе код и данные, которыми он манипулирует, исключая как вмешательство извне, так и неправильное использование данных. В объектно-ориентированном языке данные и код могут быть объединены в совершенно автономный черный ящик. Внутри такого ящика находятся все необходимые данные и код. Когда код и данные связываются вместе подобным образом, создается объект.
Т.е. инкапсуляция представляет собой способности языка скрывать излишние детали реализации от пользователя объекта. Например, предположим, что используется класс по имени DatabaseReader, который имеет два главных метода: Ореn() и Close().
Фиктивный класс DatabaseReader инкапсулирует внутренние детали нахождения, загрузки, манипуляций и закрытия файла данных. Программистам нравится инкапсуляция, поскольку этот принцип ООП упрощает кодирование. Нет необходимости беспокоиться о многочисленных строках кода, которые работают "за кулисами", чтобы реализовать функционирование класса DatabaseReader. Все, что потребуется – это создать экземпляр и отправлять ему соответствующие сообщения.
С идеей инкапсуляции программной логики тесно связана идея защиты данных. В идеале данные состояния объекта должны быть специфицированы с использованием ключевого слова private. Таким образом, внешний мир должен вежливо попросить, если захочет изменить или получить лежащее в основе значение. Это хороший принцип, поскольку общедоступные элементы данных можно легко повредить.
Основной единицей инкапсуляции в C# является класс, который определяет форму объекта. Он описывает данные, а также код, который будет ими оперировать. В C# описание класса служит для построения объектов, которые являются экземплярами класса. Следовательно, класс, по существу, представляет собой ряд схематических описаний способа построения объекта.
Код и данные, составляющие вместе класс, называют членами. Данные, определяемые классом, называют полями, или переменными экземпляра. А код, оперирующий данными, содержится в функциях-членах, самым типичным представителем которых является метод. В C# метод служит в качестве аналога подпрограммы. Таким образом, методы класса содержат код, воздействующий на поля, определяемые этим классом.
