Скачать презентацию Java Lecture 1 Intro DSA Collections Voronezh 2012 Скачать презентацию Java Lecture 1 Intro DSA Collections Voronezh 2012

01_OOP_DSA_COLLECTIONS.pptx

  • Количество слайдов: 30

Java Lecture #1 Intro DSA Collections Voronezh, 2012 Java Lecture #1 Intro DSA Collections Voronezh, 2012

Жизненный цикл программы на Java 2 Жизненный цикл программы на Java 2

Парадигмы программирования • • • Процедурное программирование Структурное программирование модульное программирование …. Объектно-ориентированное программирование Парадигмы программирования • • • Процедурное программирование Структурное программирование модульное программирование …. Объектно-ориентированное программирование 3

Объектно-ориентированное программирование • Программа – взаимодействие объектов, компонентов, отсылка и обработка событий. 4 Объектно-ориентированное программирование • Программа – взаимодействие объектов, компонентов, отсылка и обработка событий. 4

Объект: состояние, поведение, уникальность 5 Объект: состояние, поведение, уникальность 5

Объекты и классы 6 Объекты и классы 6

Принципы ООП 7 Принципы ООП 7

Принципы ООП 8 Принципы ООП 8

Принципы ООП 9 Принципы ООП 9

Классы и экземпляры 10 Классы и экземпляры 10

Коллекции объектов • Массивы • Классы контейнеры пакета java. util. * 11 Коллекции объектов • Массивы • Классы контейнеры пакета java. util. * 11

Массивы • • • данные помещаются последовательно в специально отведенную для этого область памяти Массивы • • • данные помещаются последовательно в специально отведенную для этого область памяти Данные в массиве должны быть одного типа, а значит и размера Позволяет легко узнать адрес в памяти по которому хранится нужные элемент (в массивах Java объекты не хранятся, хранятся лишь указатели на объекты) данные помещаются последовательно в специально отведенную для этого область памяти время обращения к произвольному элементу массива постоянное 12

Коллекции • Коллекции (контейнеры) – хранилища, поддерживающие разнообразные способы накопления и упорядочивания объектов с Коллекции • Коллекции (контейнеры) – хранилища, поддерживающие разнообразные способы накопления и упорядочивания объектов с целью обеспечения возможностей эффективного доступа к ним • В Java коллекции разделены на интерфейсы, абстрагирующие общие принципы работы с коллекциями, и классы, реализующие конкретную функциональность • Не все методы, заявленные в интерфейсах, должны в действительности реализовываться классами. Часть методов может просто выбрасывать исключение Unsupported. Operation. Exception 13

Классы и интерфейсы коллекций 14 Классы и интерфейсы коллекций 14

Основные концепции • • List<E> - хранит элементы в порядке вставки Set<E> - нельзя Основные концепции • • List - хранит элементы в порядке вставки Set - нельзя хранить повторяющиеся элементы Queue - выдает элементы в порядке, определяемом спецификой очереди Map - набор пар объектов "ключ-значение" с возможностью выборки по ключу 15

Реализации интерфейса List Array. List - динамический вариант массивов: • неэффективны в операциях вставки-удаления Реализации интерфейса List Array. List - динамический вариант массивов: • неэффективны в операциях вставки-удаления элементов --> Vector - альтернатива Array. List: • все методы синхронизированы Linked. List – массив хранит каждый объект как отдельное звено, в каждом из которых находится ссылка на следующее/предыдущее звено последовательности. Linked. List link 16

Collection extends Iterable Итератор Iterator<T> • boolean has. Next(); • T next(); • void Collection extends Iterable Итератор Iterator • boolean has. Next(); • T next(); • void remove(); Iterable • Iterator iterator(); Позволяет работать с коллекцией как с набором (серией) элементов Единственный способ обращения к элементу основан на вызове его метода next() Метод void remove() удаляет объект из коллекции: • при удалении элемента по заданной позиции необходимо "пройти" его: Iterator it = с. iterator(); it. remove(); Iterator it = с. iterator(); it. next(); it. remove(); Iterable numbers = new Array. List(); for (Double number : numbers) System. out. println(number); 17

Реализация Implementation Hash Table Inter Set face List s Map Resizable Array Hash. Set Реализация Implementation Hash Table Inter Set face List s Map Resizable Array Hash. Set Balanced Tree. Set Array. List Hash. Map Linked List Hash Table + Linked List Linked. Hash. Set Linked. List Tree. Map Linked. Hash. Map 18

Types of Collections. Sorting and ordering. 19 Types of Collections. Sorting and ordering. 19

Задание порядка в Java • интерфейс Comparable • интерфейс Comparator 20 Задание порядка в Java • интерфейс Comparable • интерфейс Comparator 20

Sorting with java. lang. Comparable § § Для поддержки сортировки в Java Collections используется Sorting with java. lang. Comparable § § Для поддержки сортировки в Java Collections используется интерфейс Comparable, который реализуют стандартные типы данных. Чтобы сравнивать объекты необходимо реализовать метод compare. To(Object), который возвращает: 0 – если объекты равны > 0 – если this больше < 0 – если this меньше ü sgn(x. compare. To(y)) == -sgn(y. compare. To(x)) ü (x. compare. To(y) > 0 && y. compare. To(z) > 0) -> x. compare. To(z)>0 ü x. compare. To(y)==0 -> sgn(x. compare. To(z)) == sgn(y. compare. To(z)) 21

Comparable example Integer extends Number implements Comparable<Integer> { int compare. To(Integer another. Integer) { Comparable example Integer extends Number implements Comparable { int compare. To(Integer another. Integer) { int this. Val = this. value; int another. Val = another. Integer. value; return (this. Val < another. Val ? -1 : (this. Val == another. Val ? 0 : 1)); } } 22

Sorting with Java. util. Comparator § § Также можно сравнивать объекты с помошью внешнего Sorting with Java. util. Comparator § § Также можно сравнивать объекты с помошью внешнего объекта, не изменяя код самих объектов. Для этого используется интерфейс java. util. Comparator, в котором необходимо реализовать метод compare(Object, Object) Сравнение производится по полям класса с помошью getter’ов Классы-компараторы нужны в случае, когда объекты сортированных коллекций не реализуют интерфейс Comparable. 23

Best Practices § Используйте интерфейс только для определения типов. Шаблон интерфейса констант - это Best Practices § Используйте интерфейс только для определения типов. Шаблон интерфейса констант - это неудачный вариант использования интерфейсов. § Проверяйте параметры в публичных методах. 24

Best Practices § Возвращайте пустой объект, а не null 25 Best Practices § Возвращайте пустой объект, а не null 25

Best Practices § Для таких случаев есть паттерн Null Object 26 Best Practices § Для таких случаев есть паттерн Null Object 26

Best Practices § § § Во имя эффективности (без обязательности ее достижения) делается больше Best Practices § § § Во имя эффективности (без обязательности ее достижения) делается больше вычислительных ошибок, чем по каким-либо иным причинам, включая непроходимую тупость. William A. Wolf Мы обязаны забывать о мелких усовершенствованиях, скажем, на 97% рабочего времени: опрометчивая оптимизация – корень всех зол. Donald E. Knuth Что касается оптимизации, то мы следуем двум правилам: Правило 1: Не делайте этого. Правило 2 (только для экспертов): пока не делайте этого – т. е. пока у вас нет абсолютно четкого, но неоптимизированного решения. M. A. Jackson 27

Best Practices § Для ссылки на объект используйте его интерфейс 28 Best Practices § Для ссылки на объект используйте его интерфейс 28

Java. util. Collections § § Класс Collections содержит статические методы работы с коллекциями: § Java. util. Collections § § Класс Collections содержит статические методы работы с коллекциями: § Создание immutable коллекций § Shuffle § Сортировочки, binary Search § Min, max § Thread safe synchronized collections § Index of sublist § Etc § Класс Arrays – то же самое, только с массивами § as. List() @see Arrays, Collections & Apcahe Collection. Utils 29

Library § § § Effective Java. Programming Language Guide Item 25. Prefer Lists to Library § § § Effective Java. Programming Language Guide Item 25. Prefer Lists to Arrays http: //books. google. ru/books? id=ka 2 VUBq. Hi. Wk. C&lpg=PA 119&ots=y. YDh Qep 0 U_&dq=bloch%20 arrays%20 prefer&pg=PA 119#v=onepage&q&f=fal se Thinking In Java by Bruce Eckel Java Interview Design Patterns - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides OReilly. Java. Generics. and_Collections. Oct. 2006 30