dir.by  
  Search  
Programming, development, testing
Паттерны, шаблоны проектирования | принципы ООП | рефакторинг кода
Что такое Объектно-ориентированное программирование? Принципы: абстрагирование, инкапсуляция, наследование, полиморфизм
  Looked at 4360 times    
 Объектно-ориентированное программированиею (ООП) 
Объектно-ориентированное программированиею - это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса.
Классы образуют иерархию наследования.
Принципы ООП. 4 принципа:
Абстрагирование
Инкапсуляция
Наследование
Полиморфизм
 
Абстрагирование
Абстрагирование – это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция – это набор всех таких характеристик.

Абстракция это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи.
 
Инкапсуляция
Инкапсуляция это скрытие данных и методов.

Инкапсуляция позволяет пользователю не задумываться о сложности класса (что у него внутри?), а взаимодействовать с классом посредством предоставляемых открытых методов и данных.

То есть пользователю предоставляется только спецификация объекта.
Спецификация объекта это открытые методы и открытые данные класса.
Открытые методы и открытые данные класса объявляются с помощью слова public.

Пользователь не может использовать закрытые методы и данные класса.
Закрытые методы и данные класса объявляются с помощью слов: private, protected, internal.

Инкапсуляция позволяет защитить важные данные для класса.

Пример
  C#  
// мой класс
class ImageInfo
{
     // инкапсулированные данные (скрытые модификатором доступа protected)
     protected int Width;
     protected int Height;

     // открытый конструктор
     public ImageInfo(string filename)
     {
          // load image
          Image image = Image.FromFile(filename); // класс из библиотеки C# System.Drawing

          // get image size
          Width = image.Width;
          Height = image.Height;
     }

     // открытые методы
     public int GetWidth()
     {
          return Width;
     }

     public int GetHeight()
     {
          return Height;
     }
}

// главный класс программы
class Program
{
     static void Main(string[] args)
     {
          // создаем объект
          ImageInfo img = new ImageInfo("D:\Bear.jpg");

          // получаем значение
          int w = img.GetWidth();
          int h = img.GetHeight();
     }
}


В примере
У класса ImageInfo есть закрытые данные Width и Height это инкапсулция.
У класса ImageInfo есть открытые методы GetWidth, GetHeight мы их и используем.
 
Наследование
Наследование в C# ... позволяет описать новый класс на основе существующего класса (родительского класса).
Новый класс заимствует методы, поля, свойства родительского класса.

Пример
  C#  
class Animal
{
     ...
}

class Dog : Animal // наследование
{
     ...
}


В наследовании может участвовать абстрактный класс ...
 
Полиморфизм
Полиморфизм это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе объекта и организации объекта.

Другими словами:
Возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования.

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

Пример
  C#  
// интерфейс IGraphic
interface IGraphic
{
     void ShowText(string text);
}

// класс ConsoleApp
class ConsoleApp : IGraphic
{
     public void ShowText(string text)
     {
          Console.WriteLine("Рисуем текст " + text + " в консольном приложении");
     }
}

// класс Phone
class Phone : IGraphic
{
     public void ShowText(string text)
     {
          // рисуем текст на телефоне
     }
}

class Program
{
     static void Main(string[] args)
     {
          IGraphic graphic = null;

          // создаем IGraphic реализация ConsoleApp
          graphic = new ConsoleApp();

          // Это полиморфизм мы вызываем метод ShowText у интерфейса IGraphic
          // В реальности вызовется ShowText у класса кто реализовал интерфейс IGraphic
          graphic.ShowText("Hello");

          // создаем IGraphic реализация Phone
          graphic = new Phone();

          // Это полиморфизм мы вызываем метод ShowText у интерфейса IGraphic
          // В реальности вызовется ShowText у класса кто реализовал интерфейс IGraphic
          graphic.ShowText("Hello");
     }
}


Вывод:
В примере вызывается 2 раза
graphic.ShowText("Hello");
graphic.ShowText("Hello");
казалось бы это одна и та же строчка но,
текст рисуется в первой строчке в консольном приложении
во второй строчке текст рисуется на телефоне
Это и есть полиморфизм один и тот же вызов, а действия разные.
 
← Previous topic
Что такое подкласс или дочерний класс или наследник класса? Что такое родительский класс ?
 
Next topic →
Что такое рефакторинг кода ?
 
Your feedback ... Comments ...
   
Your Name
Your comment (www links can only be added by a logged-in user)

  Объявления  
  Объявления  
 
Введение
Что такое подкласс или дочерний класс или наследник класса? Что такое родительский класс ?
Принципы ООП
Что такое Объектно-ориентированное программирование? Принципы: абстрагирование, инкапсуляция, наследование, полиморфизм
Рефакторинг кода
Что такое рефакторинг кода ?
Шаблоны проектирования
Порождающие паттерны
Фабричный метод (Factory Method) это порождающий шаблон проектирования
Абстрактная фабрика (Abstract Factory) это порождающий шаблон проектирования
Одиночка (Singleton) это порождающий шаблон проектирования
Прототип (Prototype) это порождающий шаблон проектирования
Строитель (Builder) это порождающий шаблон проектирования

Паттерны поведения
Стратегия (Strategy) это поведенческий шаблон проектирования
S.O.L.I.D. (5 принципов проектирования программы)
Что такое SOLID ?
Single Responsibility Principle (Принцип единственной обязанности) SOLID проектирование
Open/Closed Principle (Принцип открытости/закрытости) SOLID проектирование

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика