44
Объекты, классы и пакеты в Java Алексей Владыкин 22 сентября 2014 Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 1 / 36

Java, осень 2014: Объекты, классы и пакеты в Java

Embed Size (px)

DESCRIPTION

* Основы ООП. * Класс, интерфейс, перечисление. * Аннотации. * Модификаторы доступа. * Вложенные классы. * Наследование. * Пакеты.

Citation preview

Page 1: Java, осень 2014: Объекты, классы и пакеты в Java

Объекты, классы и пакеты в Java

Алексей Владыкин

22 сентября 2014

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 1 / 36

Page 2: Java, осень 2014: Объекты, классы и пакеты в Java

1 Основы ООП

2 Классы

3 Наследование

4 Пакеты

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 2 / 36

Page 3: Java, осень 2014: Объекты, классы и пакеты в Java

Основы ООП

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 3 / 36

Page 4: Java, осень 2014: Объекты, классы и пакеты в Java

Основы ООП

Определение ООП

Объект — это мыслимая или реальная сущность, обладающаяхарактерным поведением и отличительными характеристиками иявляющаяся важной в предметной области

Гради Буч

Объектно-ориентированное программирование — парадигмапрограммирования, в которой программа строится извзаимодействующих объектов

Ср.: процедурное, функциональное, логическое программирование

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 4 / 36

Page 5: Java, осень 2014: Объекты, классы и пакеты в Java

Основы ООП

Свойства объекта

Объект является экземпляром класса

Объект имеет внутреннее состояние

Объект может принимать сообщения(в большинстве языков сообщение = вызов метода)

Объект — это «умные данные»

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 5 / 36

Page 6: Java, осень 2014: Объекты, классы и пакеты в Java

Основы ООП

Возможности ООП

ИнкапсуляцияСокрытие деталей реализации за внешним интерфейсом

НаследованиеСоздание производных классов, наследующих свойства базового

ПолиморфизмРазная обработка сообщений в разных классах

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 6 / 36

Page 7: Java, осень 2014: Объекты, классы и пакеты в Java

Основы ООП

ООП в Java

Поддержка ООП заложена в Java изначально(инкапсуляция, наследование, полиморфизм)

В Java все является объектом, кроме примитивных типов

Исполняемый код может находиться только в классе

Стандартная библиотека предоставляет огромное количествоклассов, но можно свободно создавать свои

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 7 / 36

Page 8: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 8 / 36

Page 9: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Объявление класса

/* modifiers */ class Example {

/* class content: fields and methods */

}

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 9 / 36

Page 10: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Модификаторы доступа

publicдоступ для всех

protectedдоступ в пределах пакета и дочерних классов

privateдоступ в пределах класса

по умолчанию (нет ключевого слова)доступ в пределах пакета

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 10 / 36

Page 11: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Вложенные классы

Можно объявить класс внутри другого класса

Такие классы имеют доступ к private-членам друг друга

Экземпляр вложенного класса связан с экземпляром внешнегокласса

Если связь не нужна, вложенный класс объявляют смодификатором static

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 11 / 36

Page 12: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Поля

class Example {

/* modifiers */ int number;/* modifiers */ String text = "hello";

}

Поля инициализируются значениями по умолчаниюМодификатор final — значение должно быть присвоено ровноодин раз к моменту завершения инициализации экземпляра

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 12 / 36

Page 13: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Методы

class Example {

private int number;

/* modifiers */ int getNumber () {return number;

}

}

Возможна перегрузка методов(несколько одноименных методов с разными параметрами)

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 13 / 36

Page 14: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Конструкторы

class Example {

private int number;

/* modifiers */ Example(int number) {this.number = number;

}

}

Если не объявлен ни один конструктор, автоматически создаетсяконструктор по умолчанию (без параметров)

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 14 / 36

Page 15: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Деструктор

В Java нет деструкторов, сбор мусора автоматический

Есть метод void finalize(), но пользоваться им нерекомендуется

При необходимости освободить ресурсы заводят обычный методvoid close() или void dispose()

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 15 / 36

Page 16: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Принцип «Tell, Don’t Ask»

Procedural code gets information then makes decisions.Object-oriented code tells objects to do things.

Alec Sharp

Правильно: говорить объектам, что вам от них нужно

Неправильно: спрашивать у объекта его состояние и объяснятьему, что с ним делать дальше

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 16 / 36

Page 17: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Статические поля и методы

class Example {

/* modifiers */ static finalint DEFAULT_NUMBER = 333;

/* modifiers */ static int getDefaultNumber () {return DEFAULT_NUMBER;

}

}

Статические поля и методы относятся не к экземпляру класса, ако всему классу

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 17 / 36

Page 18: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Доступ к статическим членам

int defaultNumber = Example.DEFAULT_NUMBER;// defaultNumber -> 333

defaultNumber = Example.getDefaultNumber ();// defaultNumber -> 333

Example e = new Example (3);// possible , but discourageddefaultNumber = e.getDefaultNumber ();// defaultNumber -> 333

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 18 / 36

Page 19: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Интерфейсы

Интерфейс определяет возможные сообщения,но не их реализацию

interface Interface1 {int getNumber ();

}

Класс может реализовывать несколько интерфейсов

class Example implements Interface1 , Interface2 {int getNumber () {

// implementation}// other methods

}

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 19 / 36

Page 20: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Перечисления

Класс с фиксированным количеством экземпляровМожет иметь поля и методы

enum Direction {LEFT ,RIGHT ,UP,DOWN

}

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 20 / 36

Page 21: Java, осень 2014: Объекты, классы и пакеты в Java

Классы

Аннотации

Метаданные к элементам программыОтсутствует исполняемый код

import java.lang.annotation .*;

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interface Version {

String value ();String date() default "";

}

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 21 / 36

Page 22: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 22 / 36

Page 23: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Объявление класса-наследника

class Derived extends Example {

/* derived class content */

}

Java не поддерживает множественное наследование,но есть интерфейсыВсе классы наследуют java.lang.Object

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 23 / 36

Page 24: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Конструктор класса-наследника

class Derived extends Example {

Derived () {this (10);

}

Derived(int number) {super(number );

}

}

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 24 / 36

Page 25: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Переопределение методов

class Derived extends Example {

@Overrideint getNumber () {

int number = super.getNumber ();return Math.max(10, number );

}

}

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 25 / 36

Page 26: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Полиморфизм в действии

Example e = new Example (3);// e.getNumber () -> 3

e = new Derived (3);// e.getNumber () -> 10

Derived d = (Derived) e;// d.getNumber () -> 10

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 26 / 36

Page 27: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Liskov Substitution Principle

Если S является подтипом T , тогда объекты типа T в программемогут быть замещены объектами типа S без каких-либоизменений желательных свойств этой программы

Поведение наследуемых классов не должно противоречитьповедению, заданному базовым классом, то есть поведениенаследуемых классов должно быть ожидаемым для кода,использующего переменную базового типа.

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 27 / 36

Page 28: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Оператор instanceof

Позволяет проверить тип объекта в момент исполненияпрограммы

Example e = new Example (3);// e instanceof Object -> true// e instanceof Example -> true// e instanceof Derived -> false

e = new Derived (3);// e instanceof Object -> true// e instanceof Example -> true// e instanceof Derived -> true

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 28 / 36

Page 29: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Модификатор final

final class Example {...}нельзя создать класс-наследник

final int getNumber() {...}нельзя переопределить метод в дочернем классе

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 29 / 36

Page 30: Java, осень 2014: Объекты, классы и пакеты в Java

Наследование

Модификатор abstract

abstract class Example {...}нельзя создать экземпляр класса

abstract int getNumber();метод без реализации (класс должен быть абстрактным)

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 30 / 36

Page 31: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 31 / 36

Page 32: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36

Page 33: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36

Page 34: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36

Page 35: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2014;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36

Page 36: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2014;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36

Page 37: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2014;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36

Page 38: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2014.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2014.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 34 / 36

Page 39: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2014.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2014.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 34 / 36

Page 40: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2014.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2014.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 34 / 36

Page 41: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36

Page 42: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36

Page 43: Java, осень 2014: Объекты, классы и пакеты в Java

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36

Page 44: Java, осень 2014: Объекты, классы и пакеты в Java

Что сегодня узнали

Что такое ООП

Как в Java объявить класс, создать его экземплярыи работать с ними

Как в Java реализуется инкапсуляция, наследованиеи полиморфизм

Что такое пакеты и как с ними работать

Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 36 / 36