Презентация "Объектно - ориентированное программирование"

Подписи к слайдам:
Объектно-ориентированное программирование (ООП) Класс и Объект
  • Класс – это абстрактный тип данных. С помощью класса описывается некоторая сущность (характеристики и возможные действия)
  • Описав класс, мы можем создать его экземпляр –объект. Объект – это уже конкретный представитель класса.
  • Класс – это абстрактное представление чего-либо.
  • Объект - используемый экземпляр того, что представляет класс.
Основные принципы объектно-ориентированного программирования
  • Инкапсуляция 
  • Наследование
  • Полиморфизм
  • Абстракция
Инкапсуляция
  • Инкапсуляция – позволяет скрывать внутреннюю реализацию.
  • В классе могут быть реализованы внутренние вспомогательные методы, поля, к которым доступ для пользователя необходимо запретить.
Наследование
  • Наследование – позволяет создавать новый класс на базе другого.
  • Класс, на базе которого создается новый класс, называется базовым, а базирующийся новый класс – наследником.
    • Например, есть базовый класс животное. В нем описаны общие характеристики для всех животных (класс животного, вес). На базе этого класса можно создать классы наследники (Собака, Слон) со своими специфическими свойствами.
    • Все свойства и методы базового класса при наследовании переходят в класс наследник.
Полиморфизм
  • Полиморфизм – это способность объектов с одним интерфейсом иметь различную реализацию.
    • Например, есть два класса, Круг и Квадрат. У обоих классов есть метод GetSquare(), который считает и возвращает площадь. Но площадь круга и квадрата вычисляется по-разному, соответственно, реализация одного и того же метода различная.
Абстракция
  • Абстракция – позволяет выделять из некоторой сущности только необходимые характеристики и методы, которые в полной мере (для поставленной задачи) описывают объект.
    • Например, создавая класс для описания студента, мы выделяем только необходимые его характеристики, такие как ФИО, номер зачетной книжки, группа. Здесь нет смысла добавлять поле вес или имя его кота/собаки и т.д.
Класс
  • Класс – это абстрактный тип данных. Другими словами, класс – это некоторый шаблон, на основе которого будут создаваться его экземпляры – объекты.
  • [модификатор доступа] class [имя_класса] {    //тело класса }public – доступ к классу возможен из любого места одной сборки либо из другой сборки, на которую есть ссылка; - internal – доступ к классу возможен только из сборки, в которой он объявлен
Схема Класса Инструменты схемы классов Члены класса
  • поля;
  • константы;
  • свойства;
  • конструкторы;
  • методы;
  • события;
  • операторы;
  • индексаторы;
  • вложенные типы.
Поля класса
  • Поля служат для хранения данных, содержащихся в объекте. Поля аналогичны переменным, т.к. они непосредственно читаются и устанавливаются.
  • Поле – это переменная, объявленная внутри класса.
    • Как правило, поля объявляются с модификаторами доступа private либо protected, чтобы запретить прямой доступ к ним.
    • Для получения доступа к полям следует использовать свойства или методы.
Закрытые, защищенные и открытые поля
  • Private – "объекты только этого класса могут обращаться к данному полю".
  • Public – "объекты любого класса могут обращаться к этому полю".
  • Protected – "только объекты классов-наследников могут обращаться к полю".
    • Если построен класс Animal, то другой класс, например, класс Mammal (Млекопитающее), может объявить себя наследником класса Animal.
Константы
  • Константы-члены класса ничем не отличаются от простых констант.
  • Константа – это переменная, значений которой нельзя изменить. Константа объявляется с помощью ключевого слова const. Пример объявления константы: class Math {    private const double Pi = 3.14; }
Методы
  • Методами называют действия, которые объект может выполнять.
  • Метод позволяет описать порядок выполнения определенных действий.
  • Описание метода называется программным кодом или просто кодом.
  •  Методы позволяют сократить объем кода.
Методы public void SayHello () { string fullname; fullname ="Hellow, " + FirstName + " " + Surname; } Использование слова void перед именем метода означает, что, когда завершается выполнение метода, возвращается пустое значение, то есть по завершении определенных действий, которые выполняет метод, он никаких значений не возвращает. Методы

Вызов из формы

  • Статический метод – это метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр (объект) класса, в котором он объявлен.
  • Простой метод – это метод, который имеет доступ к данным объекта, и его вызов выполняется через объект.
Простой метод
  • Класс Телевизор, у него есть поле switchedOn, которое отображает состояние включен/выключен, и два метода – включение и выключение: class TVSet {    private bool switchedOn;    public void SwitchOn()    {      switchedOn = true;    }    public void SwitchOff()    {      switchedOn = false;    }  } class Program {    static void Main(string[] args)    {      TVSet myTV = new TVSet();      myTV.SwitchOn(); // включаем телевизор, switchedOn = true;      myTV.SwitchOff(); // выключаем телевизор, switchedOn = false;    } }
  • Чтобы вызвать простой метод, перед его именем, указывается имя объекта. Для вызова статического метода необходимо указывать имя класса.
  • Пример статического метода, который обрезает строку до указанной длины, и добавляет многоточие: class StringHelper {    public static string TrimIt(string s, int max)    {      if (s == null)        return string.Empty;      if (s.Length <= max)        return s;      return s.Substring(0, max) + "...";    } } class Program {    static void Main(string[] args)    {      string s = "Очень длинная строка, которую необходимо обрезать до указанной длины и добавить многоточие";      Console.WriteLine(StringHelper.TrimIt(s, 20)); //"Очень длинная строка…"      Console.ReadLine();    } }
Конструктор
  • Конструктор – это метод класса, предназначенный для инициализации объекта при его создании.
  • Инициализация – это задание начальных параметров объектов/переменных при их создании.
  • Особенностью конструктора, как метода, является то, что его имя всегда совпадает с именем класса, в котором он объявляется.
  • При этом, при объявлении конструктора, не нужно указывать возвращаемый тип, даже ключевое слово void.
  • Конструктор следует объявлять как public, иначе объект нельзя будет создать 
  • Указатель this - это указатель на объект, для которого был вызван нестатический метод.
  • Ключевое слово this обеспечивает доступ к текущему экземпляру класса.
  • Классический пример использования this, это как раз в конструкторах, при одинаковых именах полей класса и аргументов конструктора.
  • Ключевое слово this это что-то вроде имени объекта, через которое мы имеем доступ к текущему объекту. 
Поля класса Employee

Доступ к полю в форме

Наследование класса
  • class [имя_класса] : [имя_базового_класса] {    // тело класса }
  • В программировании наследование позволяет создавать новый класс на базе другого.
  • Класс, на базе которого создается новый класс, называется базовым, а базирующийся новый класс – наследником или производным классом.
  • В класс-наследник из базового класса переходят поля, свойства, методы и другие члены класса.
Наследование класса Свойства
  • Представляют собой способ доступа к полям объекта
  • Для использующих класс программ свойства выглядят как поля с данными, однако внутри класса являются кодом – специальным методом для работы с полями.
  • В свойство можно поместить проверку допустимости значения.
  • Внутри тела свойства используются специальные процедуры аксессоры (accessors) –Get и Set.
  • Обеспечивают контроль над процессом присваивания или возврата значений полей, что позволяет изолировать и проверять данные до изменения или чтения значений.
Свойства
  • Свойства предоставляют удобный механизм доступа к полю класса (чтение поля и запись). Свойство представляет собой что-то среднее между полем и методом класса.
  • [модификатор доступа] [тип] [имя_свойства] {    get    {      // тело аксессора для чтения из поля    }    set     {      // тело аксессора для записи в поле    } }
Свойства

Если бы просто сделали поле year открытым и не использовали ни методы, ни свойство для доступа, мы могли бы записать в это поле любое значение, в том числе и некорректное, а так мы можем контролировать чтение и запись.

Свойства События
  • Применения событий позволяет объектам реагировать на те или иные ситуации и выполнять необходимые ответные действия.
  • Событие может вызываться только в том классе, где оно объявлено
События и делегаты
  • Бывают ситуации, когда программисту требуется написать гибкий код, реагирующий на выполнение конкретных операций.
  • Например были созданы различные ЭУ (кнопки, поля и т.д.). Но разработчики не знали, как мы будем их использовать. ЭУ имеют точки взаимодействия , встроенные в код таким образом, чтобы они могли поддерживать связь с вашей программой. Эти точки взаимодействия называются событиями (events). События срабатывают всякий раз, когда пользователь выполняет определенные действия(нажимает на кнопку).
  • Программисты пишут код, который связывает эти события с другим кодом в разрабатываемой программе и должен выполняться при наступлении этих событий (нажатие кнопки).
  • Для выполнения этой задачи используются делегаты (delegates).
События и делегаты
  • Событие определяет тип уведомлений, которые могут предоставляться объектом, и делегат позволяет связать событие с тем кодом, которое должен исполняться при его наступлении.
  • Событие – это тип класса , который позволяет вашему классу или экземпляру класса уведомлять другой код о том, что происходит в пределах этого класса.

С помощью ключевого слова event объявляем событие AgeChange класса Event Hander.

Event Hander представляет собой класс, который принадлежит библиотеки .NET Framework

Чтобы сгенерировать событие нужно вызвать как простой метод

Чтобы добавить свой объект в качестве получателя события , нужно выполнить операцию добавления к текущему значению нового экземпляра обработчика с помощью операции +=

Если нужно удалить обработчик события, то выполняется операция -=

Наше событие является делегатом EvenHander, следовательно мы должны добавить экземпляр EvenHander. Передаем делегату метод AgeChange.

Процедуры и функции – методы класса
  • Метод функциональной декомпозиции - декомпозиция главной функции на подфункции, решающие частные задачи.
    • Первыми формами модульности, появившимися в языках программирования, были процедуры и функции
    •  Один раз написанную функцию можно многократно вызывать в программе с разными значениями параметров, передаваемых функции в момент вызова.
    • Важным шагом в автоматизации программирования было появление библиотек процедур и функций, доступных из языка программирования
  • Для языков ООП, к которым относится и язык C#, роль архитектурного модуля играет класс
    • Процедуры и функции связываются теперь с классом, они обеспечивают требуемую функциональность класса и называются методами класса. 
    • Главную роль в классе начинают играть его данные – поля класса, задающие свойства объектов класса. 
    • Прежнюю роль библиотек процедур и функций теперь играют библиотеки классов.
Процедуры и функции – методы класса
  • имя_метода([список_фактических_аргументов])
  • синтаксис объявления формального аргумента:
  • [ ref | out | params ] тип_аргумента имя_аргумента.
  • Выходные аргументы всегда должны сопровождаться ключевым словом out, обновляемые - ref. 
  • Входные аргументы, как правило, задаются без ключевого слова, хотя иногда их полезно объявлять с параметром ref. 
Классы в VB Добавление методов Sub MyMetod(ByVal MyMethParam As String) …….. End Sub Function MyFunc(ByVal MyFuncParam As Integer) as String ………. MyFunc=выражение End Functon Методы
  • Методы являются обычными процедурами или функциями
  • Функция всегда возвращает результат
  • Подпрограмма для возвращения результата может использовать параметры
    • Передача параметров по значению (ByVal). Режим по умолчанию. Значения переменных , которые используются в качестве параметров, невозможно изменить в теле подпрограммы
    • Передача параметров по ссылке (ByRef). В теле вызываемой подпрограммы можно изменять значения тех переменных, которые ей передаются в качестве параметров
Классы в VB Классы в VB Наследование Свойство Public Property MyProperty() as String Get Return FmyField End Get Set(ByVal Value As String) FmyField=Value End Set End Property

Указание значения

Обязательный оператор для возврата значения

Свойства Свойства Структура проекта
  • Проект представляет собой совокупность файлов, которые компилятор использует для создания выполняемого файла.
  • Основными элементами проекта являются:
    • главный модуль приложения (файл Program.css);
    • модули форм.
Главный модуль
  • В главном модуле находится функция Main, с которой начинается выполнение программы. Функция Main создает стартовую форму (имя класса стартовой формы указывается в качестве параметра метода Run)
Модуль формы
  • Модуль формы содержит объявление класса формы. Физически модуль формы разделен на два файла:
    • Form1.cs
    • Form1.Designer.cs
Form1.Designer.cs
  • находится объявление класса формы, в том числе сформированная дизайнером формы функция InitializeComponent, обеспечивающая создание и настройку компонентов
Компиляция
  • Процесс преобразования исходной программы в выполняемую называется компиляцией или построением (build).
  • Укрупненно процесс построения программы можно представить как последовательность двух этапов:
    • компиляция и
    • компоновка.
  • На этапе компиляции выполняется перевод исходной программы (модулей) в некоторое внутреннее представление.
  • На этапе компоновки — объединение модулей в единую программу.
  • Процесс построения программы активизируется в результате выбора в меню
    • Построение-Построить
    • Отладка –Начать отладку, если с момента последней компиляции в программу были внесены изменения
  • Результат компиляции отражается в окне Список ошибок
Ошибки и предупреждения
  • Компилятор генерирует выполняемую программу (exe-файл) только в том случае, если в исходной программе (в тексте) нет ошибок.
Компиляция приложений
  • Построение решений и проектов
    • Во время стандартного построения будут перестраиваться только те проекты в которые были внесены изменения с момента последней компиляции
    • Самая быстрая
  • Перестройка решений и проектов
    • Добавление нового кода
    • Создание новой сборки
    • Ситуации, когда в процессе стандартного построения произошли ошибки
    • Перестраиваются все элементы проекта, увеличение времени
  • Очистка решений ипроектов
    • Удаление вех выходных файлов
    • Получение более компактной версии приложения