2012 10 03_java_lecture04

4,004 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,004
On SlideShare
0
From Embeds
0
Number of Embeds
3,553
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2012 10 03_java_lecture04

  1. 1. Классы, объекты и пакеты в Java Алексей Владыкин 3 октября 2012Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 1 / 42
  2. 2. 1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 2 / 42
  3. 3. Основы ООП1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 3 / 42
  4. 4. Основы ООПОпределение ООП Объектно-ориентированное программирование — парадигма программирования, в которой программа строится из взаимодействующих объектов Объект — это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области // Гради Буч Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 4 / 42
  5. 5. Основы ООПАльтернативы ООП Структурное программирование Функциональное программирование Логическое программирование Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 5 / 42
  6. 6. Основы ООПСвойства объекта Объект является экземпляром класса Объект имеет внутреннее состояние Объект может принимать сообщения (в большинстве языков сообщение = вызов метода) Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 6 / 42
  7. 7. Основы ООПВозможности ООП Инкапсуляция Сокрытие деталей реализации за набором допустимых сообщений Наследование Создание производных классов, наследующих свойства базового Полиморфизм Разная обработка сообщений в разных классах Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 7 / 42
  8. 8. Основы ООПООП в Java Поддержка ООП заложена в Java изначально (инкапсуляция, наследование, полиморфизм) В Java все является объектом, кроме примитивных типов Исполняемый код может находиться только в классе Стандартная библиотека предоставляет огромное количество классов, но можно свободно создавать свои Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 8 / 42
  9. 9. Объявление класса1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 9 / 42
  10. 10. Объявление класса/* modifiers */ class Example { /* class content : fields and methods */} Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 10 / 42
  11. 11. Объявление классаПоляclass Example { /* modifiers */ int number ; /* modifiers */ String text = " hello " ;} Поля инициализируются значениями по умолчанию Модификатор final — значение должно быть присвоено ровно один раз к моменту завершения инициализации экземпляра Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 11 / 42
  12. 12. Объявление классаМетодыclass Example { int number ; /* modifiers */ int getNumber () { return number ; }} Возможна перегрузка методов (несколько одноименных методов с разными параметрами) Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 12 / 42
  13. 13. Объявление классаКонструкторыclass Example { int number ; /* modifiers */ Example ( int number ) { this . number = number ; }} Если не объявлен ни один конструктор, автоматически создается конструктор по умолчанию (без параметров) Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 13 / 42
  14. 14. Объявление классаДеструктор В Java нет деструкторов, сбор мусора автоматический Есть метод void finalize(), но пользоваться им не рекомендуется При необходимости освободить ресурсы заводят обычный метод void close() или void dispose() Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 14 / 42
  15. 15. Объявление классаСтатические поля и методыclass Example { /* modifiers */ static final int DEFAULT_NUMBER = 333; /* modifiers */ static int getDefaultNumber () { return DEFAULT_NUMBER ; }} Статические поля и методы относятся не к экземпляру класса, а ко всему классу Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 15 / 42
  16. 16. Использование класса1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 16 / 42
  17. 17. Использование классаКласс Example можно использовать как Параметр метода Возвращаемое значение метода Локальная переменная Поле класса (того же или любого другого) Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 17 / 42
  18. 18. Использование классаСоздание экземпляраExample e = null ;// e . getNumber () -> NullPointerExceptione = new Example (3);// e . getNumber () -> 3e . number = 10;// e . getNumber () -> 10 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 18 / 42
  19. 19. Использование классаДоступ к статическим членамint defaultNumber = Example . DEFAULT_NUMBER ;// defaultNumber -> 333defaultNumber = Example . getDefaultNumber ();// defaultNumber -> 333Example e = new Example (3);// possible , but discourageddefaultNumber = e . getDefaultNumber ();// defaultNumber -> 333 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 19 / 42
  20. 20. Наследование1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 20 / 42
  21. 21. НаследованиеОбъявление класса-наследникаclass Derived extends Example { /* derived class content */} Java не поддерживает множественное наследование, но есть интерфейсы Все классы наследуют java.lang.Object Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 21 / 42
  22. 22. НаследованиеКонструктор класса-наследникаclass Derived extends Example { Derived () { this (10); } Derived ( int number ) { super ( number ); }} Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 22 / 42
  23. 23. НаследованиеПереопределение методовclass Derived extends Example { @Override int getNumber () { int number = super . getNumber (); return Math . max (10 , number ); }} Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 23 / 42
  24. 24. НаследованиеПолиморфизм в действииExample e = new Example (3);// e . getNumber () -> 3e = new Derived (3);// e . getNumber () -> 10Derived d = ( Derived ) e ;// d . getNumber () -> 10 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 24 / 42
  25. 25. НаследованиеОператор instanceof Позволяет проверить тип объекта в момент исполнения программыExample e = new Example (3);// e instanceof Object -> true// e instanceof Example -> true// e instanceof Derived -> falsee = new Derived (3);// e instanceof Object -> true// e instanceof Example -> true// e instanceof Derived -> true Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 25 / 42
  26. 26. НаследованиеИнтерфейсы Интерфейс определяет возможные сообщения, но не их реализациюinterface ExampleInterface { int getNumber ();} Класс может реализовывать несколько интерфейсовclass Example implements ExampleInterface { int getNumber () { // implementation }} Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 26 / 42
  27. 27. НаследованиеМодификатор final final class Example {...} нельзя создать класс-наследник final int getNumber() {...} нельзя переопределить метод в дочернем классе Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 27 / 42
  28. 28. НаследованиеМодификатор abstract abstract class Example {...} нельзя создать экземпляр класса abstract int getNumber(); метод без реализации (класс должен быть абстрактным) Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 28 / 42
  29. 29. Наследованиеjava.lang.Object String toString() Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42
  30. 30. Наследованиеjava.lang.Object String toString() boolean equals(Object obj) Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42
  31. 31. Наследованиеjava.lang.Object String toString() boolean equals(Object obj) int hashCode() Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42
  32. 32. Наследованиеjava.lang.Object String toString() boolean equals(Object obj) int hashCode() Class getClass() Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42
  33. 33. Наследованиеjava.lang.Object String toString() boolean equals(Object obj) int hashCode() Class getClass() void wait() — три варианта void notify() void notifyAll() Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42
  34. 34. Наследованиеjava.lang.Object String toString() boolean equals(Object obj) int hashCode() Class getClass() void wait() — три варианта void notify() void notifyAll() void finalize() void clone() Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42
  35. 35. НаследованиеПример иерархии классов из JDKjava.lang.Object java.lang.Number java.lang.Integer java.lang.Double java.lang.Boolean java.lang.Character java.lang.String java.lang.AbstractStringBuilder java.lang.StringBuilder java.lang.StringBuffer Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 30 / 42
  36. 36. Пакеты1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 31 / 42
  37. 37. ПакетыЗачем нужны пакеты Задание пространства имен, предотвращение коллизий имен классов Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 32 / 42
  38. 38. ПакетыЗачем нужны пакеты Задание пространства имен, предотвращение коллизий имен классов Логическая группировка связанных классов Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 32 / 42
  39. 39. ПакетыЗачем нужны пакеты Задание пространства имен, предотвращение коллизий имен классов Логическая группировка связанных классов Сокрытие деталей реализации за счет модификаторов доступа Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 32 / 42
  40. 40. ПакетыКак работают пакеты Задание пакета для класса: package ru.compscicenter.java2012; Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 33 / 42
  41. 41. ПакетыКак работают пакеты Задание пакета для класса: package ru.compscicenter.java2012; Использование класса из пакета: классы текущего пакета и пакета java.lang всегда видны классы других пакетов доступны по полному имени с пакетом можно использовать директиву import Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 33 / 42
  42. 42. ПакетыКак работают пакеты Задание пакета для класса: package ru.compscicenter.java2012; Использование класса из пакета: классы текущего пакета и пакета java.lang всегда видны классы других пакетов доступны по полному имени с пакетом можно использовать директиву import Класс, принадлежащий пакету, должен лежать в одноименной директории: ru/compscicenter/java2012/ Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 33 / 42
  43. 43. ПакетыИмпорт Импорт одного класса: import ru.compscicenter.java2012.ExampleClass; Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 34 / 42
  44. 44. ПакетыИмпорт Импорт одного класса: import ru.compscicenter.java2012.ExampleClass; Импорт всех классов пакета: import ru.compscicenter.java2012.*; Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 34 / 42
  45. 45. ПакетыИмпорт Импорт одного класса: import ru.compscicenter.java2012.ExampleClass; Импорт всех классов пакета: import ru.compscicenter.java2012.*; Импорт статических полей и методов: import static java.lang.System.out; import static java.util.Arrays.*; Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 34 / 42
  46. 46. ПакетыКак работает импорт Директивы import позволяют компилятору получить полные имена всех используемых классов, полей и методов по их коротким именам Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 35 / 42
  47. 47. ПакетыКак работает импорт Директивы import позволяют компилятору получить полные имена всех используемых классов, полей и методов по их коротким именам В class-файл попадают полные имена, подстановка содержимого не происходит Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 35 / 42
  48. 48. ПакетыКак работает импорт Директивы import позволяют компилятору получить полные имена всех используемых классов, полей и методов по их коротким именам В class-файл попадают полные имена, подстановка содержимого не происходит При запуске программы все используемые классы должны присутствовать в classpath Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 35 / 42
  49. 49. Модификаторы доступа1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 36 / 42
  50. 50. Модификаторы доступаpublicдоступ для всехprotectedдоступ в пределах пакета и дочерних классовprivateдоступ в пределах классапо умолчанию (нет ключевого слова)доступ в пределах пакетаАлексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 37 / 42
  51. 51. Вложенные классы1 Основы ООП2 Объявление класса3 Использование класса4 Наследование5 Пакеты6 Модификаторы доступа7 Вложенные классы Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 38 / 42
  52. 52. Вложенные классыМожно объявить несколько классов в одном файле .javaТолько один класс может быть public,остальные должны быть с пакетным доступомЭффект ничем не отличается от создания отдельного java-файладля каждого классаАлексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 39 / 42
  53. 53. Вложенные классыМожно объявить класс внутри другого классаТакие классы имеют доступ к private-членам друг другаЭкземпляр вложенного класса связан с экземпляром внешнегоклассаЕсли связь не нужна, вложенный класс объявляют смодификатором staticАлексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 40 / 42
  54. 54. Вложенные классыclass Example { private int number ; int getNumber () { return new Inner (). getNumber (); } class Inner { int getNumber () { return number ; } }} Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 41 / 42
  55. 55. Что сегодня узнали Что такое ООП Как в Java объявить класс, создать его экземпляры и работать с ними Как в Java реализуется инкапсуляция, наследование и полиморфизм Что такое пакеты и как с ними работать Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 42 / 42

×