Similar presentations:
Объектно-ориентированные особенности языка Java
1. Объектно-ориентированные особенности языка Java
Java for autotesterswww.epam.com
www.epam.com
EPAM
EPAM Systems
Systems
2. Объектно-ориентированное программирование
• ООП - методология программирования– Программа представляется совокупностью
объектов
– Каждый объект - экземпляр класса
– Классы образуют иерархию наследования
• ООП использует в качестве базовых
элементов объекты, а не алгоритмы
www.epam.com
EPAM Systems
2
3. Абстракция
• Выделяйте только тефакторы, которые
нужны для решения
задачи
• Отсекайте все лишнее
www.epam.com
EPAM Systems
3
4. Инкапсуляция
• Сокрытие реализации объекта• У объекта есть внутреннее состояние,
недоступное для изменения извне
• У объекта есть интерфейс, с помощью
которого с объектом могут
взаимодействовать внешние объекты
www.epam.com
EPAM Systems
4
5. Инкапсуляция
• Пользователь (прикладнойпрограммист) не должен
менять внутреннее
состояние объекта – он не
знает, как это делается!!!
• Поля и методы делятся на
внутренние и
интерфейсные.
length
r
x, y
а
b
c
www.epam.com
EPAM Systems
5
6. Модификаторы доступа
publicprotected
(по умолчанию)
private
www.epam.com
В классе
В пакете
+
+
+
+
+
+
+
-
В подклассах
+
+
-
Везде
+
EPAM Systems
6
7. Пример ограничения доступа
Point point = new Point();point.setX(0.0);
Public методы
доступны
point.setY(1.0);
Ошибка!
point.x = 1.0; // Ошибка
System.out.println("(" + point.getX() + ", "
+ point.getY() + ")");
www.epam.com
EPAM Systems
7
8. Интерфейсы
• Интерфейс – это ссылочный тип,аналогичный классу, в котором могут быть
только константы, сигнатуры методов и
вложенные типы
– Нельзя создать экземпляр
– Нет тел методов
– Можно только реализовать в классах или
расширить в других интерфейсах
www.epam.com
EPAM Systems
8
9. Интерфейсы как API
• API - Application Programming InterfaceИнтерфейс прикладного программирования
• API делается открытым, а его реализация
может хранится в секрете
• Реализация может пересматриваться, но она
должна по прежнему реализовывать
контракт, на который полагаются клиенты
www.epam.com
EPAM Systems
9
10. Пример интерфейса
Модификатордоступа
Ключевое
слово
Имя
интерфейса
public
public interface
interface Relatable
Relatable {{
int
int isLargerThan(Relatable
isLargerThan(Relatable other);
other);
}}
Все методы
по умолчанию
public abstract
www.epam.com
Декларация метода
(Методов может
быть несколько)
EPAM Systems
10
11. Реализация интерфейса
publicpublic class
class Rectangle
Rectangle implements
implements Relatable
Relatable {{
private
private int
int width;
width;
private
private int
int height;
height;
public
public int
int
return
return
}}
getArea()
getArea() {{
width
width ** height;
height;
@Override
@Override
public
public int
int isLargerThan(Relatable
isLargerThan(Relatable other)
other) {{
Rectangle
Rectangle otherRect
otherRect == (Rectangle)
(Rectangle) other;
other;
return
return this.getArea()
this.getArea() -- otherRect.getArea();
otherRect.getArea();
}}
}}
www.epam.com
EPAM Systems
11
12. Использование интерфейса как типа
• Интерфейс определяет новый ссылочныйтип данных
• Переменная такого типа может ссылаться на
объект любого класса, реализующего
интерфейс
• Класс может реализовывать несколько
интерфейсов
www.epam.com
EPAM Systems
12
13. Изменение интерфейсов
• Есть интерфейс:public
public interface
interface DoIt
DoIt {{
void
void doSomething(int
doSomething(int i,
i, double
double x);
x);
int
int doSomethingElse(String
doSomethingElse(String s);
s);
}}
• Нужно добавить еще один метод
• Не очень хорошее решение:
public
public interface
interface DoIt
DoIt {{
void
void doSomething(int
doSomething(int i,
i, double
double x);
x);
int
int doSomethingElse(String
doSomethingElse(String s);
s);
boolean
boolean didItWork(int
didItWork(int i,
i, double
double x,
x, String
String s);
s);
}}
• Более надежное решение – наследование интерфейсов:
public
public interface
interface DoItPlus
DoItPlus extends
extends DoIt
DoIt {{
boolean
boolean didItWork(int
didItWork(int i,
i, double
double x,
x, String
String s);
s);
}}
www.epam.com
EPAM Systems
13
14. Наследование
• Механизм получения нового класса на основе ужесуществующего
– Существующий класс можно дополнять или изменять, и
получать новый класс
• Отношение IS-A («является»)
– Наследник ЯВЛЯЕТСЯ разновидностью родителя
• Существующий – суперкласс (базовый,
родительский)
• Новый – подкласс (производный, дочерний)
www.epam.com
EPAM Systems
14
15. Наследование
• Одиночное– У класса есть только один предок
• Множественное
– У класса может быть несколько предков
– Java не поддерживает множественное
наследование
• В Java у класса может быть только один
суперкласс, но класс может реализовывать
несколько интерфейсов
www.epam.com
EPAM Systems
15
16. Примеры наследования
ФигураТочка
Треугольник
Круг
Квадрат
Прямоугольник
www.epam.com
EPAM Systems
16
17. Примеры наследования
ЖивотныеМлекопитающие
Кошки
Птицы
Рыбы
Собаки
www.epam.com
EPAM Systems
17
18. Примеры наследования
Транспортные средстваСухопутные
Автомобили
Водные
Летающие
Поезда
www.epam.com
EPAM Systems
18
19. Наследование
• За исключением Object, у каждого класса есть одиннепосредственный суперкласс
• Класс Object находится во главе иерархии
• Интерфейсы не являются частью иерархии классов
• Наследуются все компоненты с модификаторами public
и protected (поля, методы и вложенные классы)
• Конструкторы не наследуются подклассами, но могут быть
вызваны в подклассе
www.epam.com
EPAM Systems
19
20. Методы класса Object
publicpublic final
final native
native Class<?>
Class<?> getClass();
getClass();
public
public native
native int
int hashCode();
hashCode();
public
public boolean
boolean equals(Object
equals(Object obj)
obj)
protected
protected native
native Object
Object clone()
clone() throws
throws CloneNotSupportedException;
CloneNotSupportedException;
public
public String
String toString()
toString()
public
public
public
public
public
public
final
final native
native void
void notify();
notify();
final
final native
native void
void notifyAll();
notifyAll();
final
final native
native void
void wait(long
wait(long timeout)
timeout)
throws
throws InterruptedException;
InterruptedException;
public
public final
final void
void wait(long
wait(long timeout,
timeout, int
int nanos)
nanos)
throws
throws InterruptedException
InterruptedException
public
public final
final void
void wait()
wait() throws
throws InterruptedException
InterruptedException
protected
protected void
void finalize()
finalize() throws
throws Throwable
Throwable
www.epam.com
EPAM Systems
20
21. Типы объекта
• В Java класс может наследоваться только отодного класса, но может реализовывать
более одного интерфейса
• У объекта может быть несколько типов:
– тип собственного класса
– типы всех суперклассов
– типы всех реализованных им интерфейсов
www.epam.com
EPAM Systems
21
22. Приведение типа объектов
• Приведение типа показываетиспользование объекта одного типа вместо
другого типа
• Неявное приведение типа
String s = "some text";
Object o = s;
• Явное приведение типа
String t = (String) o;
www.epam.com
EPAM Systems
22
23. Что можно делать в подклассах
• Поля– Унаследованные использовать как есть
– Объявить новые
– Скрыть поле (hide) (не рекомендуется)
• Методы
– Унаследованные использовать как есть
– Объявить новые
– Переопределить (override)
– Скрыть статический (hide)
• Конструкторы
– В конструкторе подкласса вызвать конструктор
суперкласса
www.epam.com
EPAM Systems
23
24. Переопределение и сокрытие методов
• Метод с сигнатурой, совпадающей ссигнатурой метода суперкласса
Нестатический метод
суперкласса
Статический метод
суперкласса
Нестатический метод
подкласса
Переопределяет
Ошибка компиляции
Статический метод
подкласса
Ошибка компиляции
Скрывает
www.epam.com
EPAM Systems
24
25. private в суперклассе
• Не наследуются у своего суперкласса• Доступны через унаследованные public или
protected методы
• У вложенного класса есть доступ к private
полям и методам своего внешнего класса
• private компоненты неявно доступны через
унаследованный вложенный класс
www.epam.com
EPAM Systems
25
26. private в суперклассе
public class Superclass {private int value;
public int getValue() {
return value;
}
}
public class Subclass extends Superclass {
public void method() {
System.out.println(value);
ОШИБКА!
System.out.println(getValue());
}
}
www.epam.com
EPAM Systems
26
27. Ключевое слова super
• Доступ к членам суперклассаsuper.superclassMethod();
• Вызов конструкторов суперкласса
super();
super(parameters);
Конструктор без
параметров обычно
нет смысла вызывать
явно
• В конструкторе вызов super – всегда
первый оператор
www.epam.com
EPAM Systems
27
28. final классы и методы
• Final классы– От final класса (неизменяемого) невозможно
наследоваться
– Например, от класса String
• Final методы
– Нельзя переопределить в подклассах
– Методы, вызываемые из конструкторов должны
обычно быть объявлены как final
– Необходимы, если реализацию метода не
должна изменяться и важна для сохранения
непротиворечивого состояния объекта
www.epam.com
EPAM Systems
28
29. Абстрактные методы и классы
• Абстрактный класс – это класс, объявленный смодификатором abstract
– могут быть, а могут и не быть абстрактные методы
– нельзя создать экземпляр, но можно создать подклассы
• Абстрактный метод – это метод, объявленный
без реализации:
abstract void moveTo(double deltaX,
double deltaY);
www.epam.com
EPAM Systems
29
30. Интерфейсы vs Абстрактные классы
• Абстрактные классы могут содержать поля (которыене static и не final)
• Абстрактные классы могут содержать реализации
методов
• Разные интерфейсы могут независимо
реализовываться классами в разных местах иерархии
• Абстрактные классы в большинстве случаев
наследуются для использования части реализации
www.epam.com
EPAM Systems
30
31. Абстрактные классы
• Может реализовывать интерфейс– При этом не обязательно реализовывать все
методы интерфейса
• Может содержать статические компоненты
– Их можно использовать с именем класса – как и
в случае любого другого класса
www.epam.com
EPAM Systems
31
32. Включение объектов
• Существуют различные варианты включенияобъектов
– Композиция
– Агрегация
– Ассоциация (Осведомленность)
www.epam.com
EPAM Systems
32
33. Композиция
• Самый строгий вид включения• Времена жизни внешнего и включаемого
объекта совпадают
• Включаемый объект может существовать
только как часть внешнего
• Отношение «целое-часть» (HAS-A)
www.epam.com
EPAM Systems
33
34. Композиция – пример
Инст ит утАвт омобиль
Зд ание
Д вигат ель
www.epam.com
EPAM Systems
34
35. Композиция - пример
publicpublic class
class Car
Car {{
private
private Engine
Engine engine;
engine;
Время жизни объектов
Car и Engine совпадает
public
public Car()
Car() {{
this.engine
this.engine == new
new Engine();
Engine();
}}
public
public Car(Engine
Car(Engine engine)
engine) {{
this.engine
this.engine == engine;
engine;
}}
public
public Engine
Engine getEngine()
getEngine() {{
return
return engine;
engine;
}}
}}
www.epam.com
EPAM Systems
35
36. Агрегация
• Отношение «целое-часть» (HAS-A)• Но объекты могут существовать независимо
• Включаемый объект может существовать и
без внешнего
www.epam.com
EPAM Systems
36
37. Агрегация – Пример
Инст ит утАвт омобиль
Факульт ет
Колесо
www.epam.com
EPAM Systems
37
38. Агрегация - пример
publicpublic class
class Car
Car {{
private
private Wheel[]
Wheel[] wheels;
wheels;
Ссылка wheels не
должна быть null
public
public Car(Wheel[]
Car(Wheel[] wheels)
wheels) {{
this.wheels
this.wheels == wheels;
wheels;
}}
public
public Wheel[]
Wheel[] getWheels()
getWheels() {{
return
return wheels;
wheels;
}}
public
public void
void setWheels(Wheel[]
setWheels(Wheel[] wheels)
wheels) {{
this.wheels
this.wheels == wheels;
wheels;
}}
}}
www.epam.com
EPAM Systems
38
39. Ассоциация
• Самый слабый вид включения• Один объект знает о существовании другого
• Осведомленность может быть взаимной
• Времена жизни объектов никак не связаны
www.epam.com
EPAM Systems
39
40. Ассоциация – пример
Инст ит утАвт омобиль
Профессор
Пассаж ир
www.epam.com
EPAM Systems
40
41. Ассоциация - пример
publicpublic class
class Car
Car {{
private
private Passenger
Passenger passenger;
passenger;
Ссылка passenger
может быть null
public
public Car(Passenger
Car(Passenger passenger)
passenger) {{
this.passenger
this.passenger == passenger;
passenger;
}}
public
public Passenger
Passenger getPassenger()
getPassenger() {{
return
return passenger;
passenger;
}}
public
public void
void setPassenger(Passenger
setPassenger(Passenger passenger)
passenger) {{
this.passenger
this.passenger == passenger;
passenger;
}}
}}
www.epam.com
EPAM Systems
41
42. Полиморфизм
• Полиморфизм –возможность объектов
с одинаковой
спецификацией иметь
различную
реализацию
• «Один интерфейс,
множество
реализаций»
www.epam.com
EPAM Systems
42
43. Вложенные классы
• Зачем они могут понадобиться?– Логическая группировка классов
– Увеличение инкапсуляции
– Более легкий для чтения и поддержки код
www.epam.com
EPAM Systems
43
44. Статические вложенные классы
public class OuterClass {...
public static class NestedClass {
...
}
}
OuterClass.NestedClass nested
= new OuterClass.NestedClass();
www.epam.com
EPAM Systems
44
45. Внутренние классы
public class OuterClass {...
public class InnerClass {
...
}
}
OuterClass.InnerClass inner
= new OuterClass().new InnerClass();
www.epam.com
EPAM Systems
45
46. Анонимные классы
button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
www.epam.com
EPAM Systems
46
47. Перечисления (enum)
• Перечисление – это тип, значения которогоограничены фиксированным множеством констант
public enum Gender {
MALE,
FEMALE;
}
public enum Season {
WINTER,
SPRING,
SUMMER,
FALL
}
www.epam.com
EPAM Systems
47
48. Перечисления могут содержать поля и методы
publicpublic enum
enum Planet
Planet {{
MERCURY(3.303e+23,
MERCURY(3.303e+23, 2.4397e6),
2.4397e6),
VENUS
VENUS (4.869e+24,
(4.869e+24, 6.0518e6),
6.0518e6),
EARTH
EARTH (5.976e+24,
(5.976e+24, 6.37814e6),
6.37814e6),
...
...
private
private final
final double
double mass;
mass;
private
private final
final double
double radius;
radius;
private
private Planet(double
Planet(double mass,
mass, double
double radius)
radius) {{
this.mass
this.mass == mass;
mass;
this.radius
this.radius == radius;
radius;
}}
public
public double
double getMass()
getMass() {{
return
return mass;
mass;
}}
public
public double
double getSurfaceGravity()
getSurfaceGravity() {{
return
return GG ** mass
mass // (radius
(radius ** radius);
radius);
}}
}}
www.epam.com
EPAM Systems
48
49. Пример использования enum
publicpublic enum
enum Direction
Direction {{
NORTH(0,
NORTH(0, 1),
1),
EAST(1,
EAST(1, 0),
0),
SOUTH(0,
SOUTH(0, -1),
-1),
WEST(-1,
WEST(-1, 0);
0);
private
private final
final int
int x;
x;
private
private final
final int
int y;
y;
private
private Direction(int
Direction(int x,
x, int
int y)
y) {{
this.x
this.x == x;
x;
this.y
this.y == y;
y;
}}
public
public int
int getX()
getX() {{
return
return x;
x;
}}
public
public int
int getY()
getY() {{
return
return y;
y;
}}
}}
...
...
public
public void
void move(Direction
move(Direction direction)
direction) {{
currentX
currentX +=
+= direction.getX();
direction.getX();
currentY
currentY +=
+= direction.getY();
direction.getY();
}}
www.epam.com
EPAM Systems
49
50. Перечисления (enum)
• Все перечисления неявно наследуются отjava.lang.Enum
• Все константы перечисления неявно имеют
модификаторы public static final
• Нельзя создать экземпляр перечисления
с помощью оператора new
• Нельзя наследоваться от перечисления
www.epam.com
EPAM Systems
50
51. Перечисления (enum)
• Некоторые нестатические методы перечисления:– ordinal() - номер элемента перечисления (номера
начинаются с 0)
– compareTo() - элементы перечисления можно
сравнивать
• Полезные статические методы перечислений:
– values() – возвращает массив из всех констант
перечисления
– valueOf(String name) – ищет константу с
заданным именем
www.epam.com
EPAM Systems
51
52. Аннотации
• Аннотации содержат данные, которые неявляются частью программы
• Применения:
– Информация для компилятора
– Обработка времени компиляции и размещения
– Обработка времени выполнения
www.epam.com
EPAM Systems
52
53. Предопределенные аннотации
• @Deprecated/**
/**
** @deprecated
@deprecated explanation
explanation of
of why
why it
it was
was deprecated
deprecated
*/
*/
@Deprecated
@Deprecated
static
static void
void deprecatedMethod()
deprecatedMethod() {{
}}
• @Override
@Override
@Override
int
int overriddenMethod()
overriddenMethod() {{
}}
• @SuppressWarnings
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
void
void useDeprecatedMethod()
useDeprecatedMethod() {{
deprecatedMethod();
deprecatedMethod();
}}
www.epam.com
EPAM Systems
53
54.
Спасибо за внимание!Контактная информация:
Денис Мурашев
Инструктор
EPAM Systems, Inc.
Адрес: Саратов, Рахова, 181
Email: [email protected]
http://www.epam.com
www.epam.com
EPAM Systems
54