Лекция 6_принципы ООП : инкапсуляция, наследование

9,450 views
9,172 views

Published on

http://spro-club.ru

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,450
On SlideShare
0
From Embeds
0
Number of Embeds
2,088
Actions
Shares
0
Downloads
92
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Лекция 6_принципы ООП : инкапсуляция, наследование

  1. 1. www.spro-club.ru
  2. 2. План Инкапсуляция  интерфейс объекта  правила доступа к данным класса Элементы классов и элементы объектов Наследование  отношения специализации и обобщения  ссылка super  модификатор protected
  3. 3. Инкапсуляция Инкапсуляция (И) (encapsulation) – «заключение в капсулу» - ограничение доступа к содержимому «капсулы» извне и отсутствие такого ограничения внутри «капсулы» И – один из основных принципов ООП И - свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (то, что у него внутри), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные
  4. 4. Интерфейс объекта При соблюдении принципа инкапсуляции (И) пользователю предоставляется только спецификация (интерфейс) объекта  Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public  Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected
  5. 5. Правила доступа к данным класса Согласно принципу Инкапсуляции не рекомендуется давать доступ к данным (переменным) класса напрямую извне Пример открытых данных:  public Rect {  public int x1, x2;  }  Rect r = new Rect();  r.x1 = 10;
  6. 6. Правила доступа к данным класса Рекомендуется закрывать все данные от прямого доступа извне (с помощью модификатора private) Доступ к данным должен осуществляться через специальные методы доступа (access methods) – «геттеры» (методы получения данных, Get) и «сеттеры» (методы установки данных, Set) Метод-получатель (геттер) должен возвращать значение того же типа, что и само поле и не имеет параметров Метод-присваиватель (сеттер) имеет тип void и принимает один параметр того же типа, что и само поле Примечание: NetBeans умеет автоматически создавать методы доступа. Для этого в окне редактора кода в контекстном меню выберите пункт «Реорганизация кода» (Refactoring) и подпункт «Инкапсулировать поля»
  7. 7. Пример методов доступа Пример:  public Rect {  private int x1, x2;  public int getX1() {  return x1;  }  public void setX1(int x1) {  this.x1 = x1;  }  }  Rect r = new Rect();  r.setX1(10);
  8. 8. Применение инкапсуляции (И) И позволяет контролировать процессы изменения и считывания данных В методы доступа можно встроить условия проверки  в присваивателе можно проверять переданное значение на попадание в область допустимых значений  в получателе можно проверять, к примеру, права доступа к этим данным или вычислять значения и т.п.
  9. 9. Элементы класса и элементы объекта Методы объектов пользуются (имеют доступ) полями данных (атрибутами) объектов Атрибуты объекта – это обычные свойства Вызвать метод объекта можно только с помощью объектной переменной. Без создания объекта это сделать нельзя Методы класса могут пользоваться только атрибутами класса Чтобы создать атрибуты и методы класса, достаточно поставить модификатор static перед этими элементами Обратиться к элементам класса можно через имя класса, а не только через объект. Т.е. для этого создавать объект не нужно! Но! Элементы класса («статические») не могут получать доступ к элементам объекта
  10. 10. Пример элементов класса Многие стандартные классы из библиотеки Java имеют методы и атрибуты класса («статические») Например, в классе Math много таких элементов Можно пользоваться ими, не создавая объект типа Math:  double x = Math.sqrt(9);  double y = Math.PI; С помощью переменных класса удобно создавать константы. Например: public class Consts {  public static final double PI = 3.14;  public static double len(double r) { return 2*PI*r; } } System.out.print(“Число ПИ = “ + Consts.PI); System.out.print(“Длина окружности = “ + Consts.len(4));
  11. 11. Специализация и обобщение Отношение специализации в русском языке выражается словом «является» Специализация – это уточнение Один объект является частным случаем другого (один объект специализирует другой) Специализация – конкретизация или уточнение Пример: Сотрудник ОА является сотрудником предприятия, программист является сотрудником ОА и т.д. Обобщение – вид отношений, обратный специализации Обобщение – переход на более абстрактный уровень Например, «любой программист является человеком»
  12. 12. Наследование Механизм построения иерархии классов Иерархия – отношение «предок»->«потомок» (родительский-дочерний классы, суперкласс- подкласс, порождающий-порождённый классы) Каждый порожденный класс иерархии имеет доступ к коду и данным всех порождающих классов (к элементом, разрешённым установленной областью видимости) Наследование – мощный механизм повторного использования программного кода
  13. 13. Наследование в Java Для того, чтобы указать, что один класс является потомком (производным) от другого класса, необходимо после его имени поставить ключевое слово extends и имя родительского класса: public class дочерний_класс extends родительский_класс { } Модификатор доступа protected позволяет открыть члены класса всем потомкам этого класса, для остальных они остаются недоступными
  14. 14. Ссылка super В чём-то похожа на this Ссылается на родительский класс Можно применять двумя способами:  получать доступ к открытым (public) и защищённым (protected) элементам родительского класса  например, super.x1 = 10;  вызывать конструктор родительского класса. Вызов конструктора родит.элемента super должен быть первым выражением в конструкторе дочернего элемента:  public Square(Graphics g) { super(g); }
  15. 15. Модификатор protected Делает элементы невидимыми извне класса Эти элементы могут быть доступны в дочерних классах в отличие от элементов с private-доступом, кот. в дочерних классах не видны
  16. 16. Пример: иерархиягеометрических фигур Среди геом.фигур можно выделить отношения обобщения-специализации Например, квадрат является ромбом с прямыми углами Квадрат является прямоугольником с одинаковыми сторонами Круг является эллипсом с одинаковыми радиусами
  17. 17. Пакеты в Java Пакет (package) – это способ группировки классов по функциональному назначению Пакеты Java обеспечивают уникальные пространства имен Пакеты могут образовывать иерархическую древовидную структуру Пакет верхнего уровня проекта должен иметь уникальное имя, не совпадающее с именами других глобальных пакетов проекта Пакеты нижнего уровня обычно связаны с функциональным назначением классов, находящихся в данном пакете Пакет, который содержит группу классов, объединяет их по некоторому смыслу
  18. 18. Пакеты в Java (продолжение)  В пакет объединяются классы, сходные по функциональному назначению  Реализуют принцип модульности  Полное имя класса включает имена пакета и всех подпакетов, в котором он описанProject_DIR | |-- classes | `-- zoostore Структура директорий, в которых | |-- model хранятся файлы классов, должна | | `-- Cat.class соответствовать структуре | | | `-- test пакетов. | `-- TestCats.class | При этом желательно файлы `-- src `-- zoostore исходных кодов и файлы классов |-- model размещать отдельно, что | `-- Cat.java повышает управляемость | `-- test
  19. 19. Описание пакета Указать имя пакета, в котором находится класс, можно с помощью директивы package  package carspack; Она должна быть самой первой командой в файле До неё могут находиться только комментарии и пустые строки Если директива package не указана в файле, то классы из него всё равно помещаются в пакет по умолчанию с именем default Примечание: имена пакетов принято указывать в нижнем регистре
  20. 20. Директива import Позволяет включать один класс или все классы пакета в текущий файл Это позволяет использовать короткие имена классов Пример:  import java.util.Random; // подключение класса  import java.awt.*; // подключение всех классов пакета
  21. 21. Задание Просмотреть 2 презентации Изучить пример Реализовать методы класса Ellipse для вычисления площади и длины Создать класс Circle – круг – путём наследования от класса Ellipse (на примере иерархии Rectangle- >Square)

×