Java осень 2014 занятие 2

Post on 25-Jun-2015

189 views 4 download

description

Java осень 2014 занятие 2

Transcript of Java осень 2014 занятие 2

Углубленное программирование на

Java Занятие 1.2 «Сессия

пользователя»

Виталий Чибриков

План лекции

2

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

Задание

3

Сессия пользователя

1. Регистрация

2. Авторизация

3. Игра

4. Выход

Задание

4

Упрощения

1. Без записи в базу

2. Без интерфейсов

3. Потоками управляет Jetty

4. «Потокоопасные» карты

Регистрация

5

Frontend

1. Страница с вводом: логин, email, пароль

Backend

1. Сервлет обработки запроса

2. Класс AccountService с методом регистрации

3. Класс UserProfile с полями: логин, email, пароль

4. Карта логин -> UserProfile

Авторизация

6

Frontend

1. Страница с вводом: логин, пароль

Backend

1. Сервлет обработки запроса

2. Класс AccountService с методом авторизации

3. Поиск UserProfile в карте по логину

4. Карта HttpSession -> UserProfile

Узнавание пользователя

7

Frontend

1. Страницы после логина

Backend

1. Сервлет обработки запроса страницы

2. Получение HttpSession из request-а

3. Поиск UserProfile в карте по HttpSession

Выход

8

Frontend

1. Кнопка выхода

Backend

1. Сервлет обработки запроса

2. Получение HttpSession из request-а

3. Удаление UserProfile в карте по HttpSession

План лекции

9

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

generics (templates)

Generic programming

N алгоритмов, M типов данных. N * M реализаций?

Алгоритмы работают с шаблонами => N реализаций

Универсальные алгоритмы

Примеры синтаксиса

List<String> students = new ArrayList<String>();

Map<Integer, String> indexToName = new HashMap<Integer, String>();

void printCollection(List<Integer> collection){…};

void printCollection(List<?> collection) {…};

void drawShape(List<Shape> shapes) {…};

void drawShape(List<? extends Shape> shapes) {…};

― аглоритмы для типов, которые будут указыны позже

10

generics vs inheritance

принцип «разновидность чего-то» (is a)

class Ветеринар<T extends Животное> extends Человек

T: Слон, Собака, Мышь

принцип «специализируется на» (of something)

В случае Т: Человек, получаем ветеринара по людям – врача

11

Пример

Шаблон

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

generics (templates)

List students == List<Object> students == List<?> students

public static Object getFirstValue(List listOfNumbers){ return listOfNumbers.get(0); }

public static String getFirstStringValue(List<String> listOfStrings){ return listOfStrings.get(0); }

public static void main(String[] args){ List<Integer> listOfNumbers = new ArrayList<Integer>(); listOfNumbers.add(42); String name1 = (String) getFirstValue(listOfNumbers); //Runtime error String name2 = getFirstStringValue(listOfNumbers); //Compile error }

12

Типизация значений

Класс с шаблонным типом

public class GenericExample<T> { private T value;

public GenericExample(T value){ this.value = value; }

public T getT(){ return value; }

public static void main(String[] args) { GenericExample<Integer> intObject = new GenericExample<Integer>(1); Integer valueInteger = intObject.getT();

GenericExample<String> stringObject = new GenericExample<String>("word"); String valueString = stringObject.getT();

} }

13

Метод с шаблонным типом

public class GenericExample {

public static <T> T getTheFirst(List<T> list){ return list.get(0); }

public static void main(String[] args) { List<Integer> listOfInts = new ArrayList<Integer>(); listOfInts.add(0); Integer intValue = getTheFirst(listOfInts);

List<String> listOfStrings = new ArrayList<String>(); listOfStrings.add(“Java is the best!”); String stringValue = getTheFirst(listOfStrings);

} }

14

class LongId<T>

public class LongId<T> { private long id;

public LongId(long id){ this.id = id; }

public long getLong(){ return id; }

}

public void manyIdsInParams(long userId, long serverId, long address){…}

public void manyIdsInParams(LongId<User> userId, LongId<Server> serverId, LongId<Address> address){…}

15

План лекции

16

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

interface Iterable<T>

interface Iterator<T>

Iterator & Iterable

17

Iterator<T> iterator()

boolean hasNext()

void remove()

T next()

Иерархия контейнеров

18

Методы

Collection

19

extends Iterable<T>

add(T object)

addAll(Collection<T> coll)

clear()

contains(Object o)

remove(Object o)

removeAll(Collection<T> coll)

size()

isEmpty()

List, Set, Queue

20

ListСписок с очередностью

LinkedList ― быстрое удаление и добавление элементов

ArrayList ― быстрый доступ по индексу

SetБез очередности

Без индекса

Быстрый поиск элемента

Queue

FIFO

Map<key, value>

Map

21

Быстрый поиск по ключу – get(key)

Объект в качестве value. Например другой контейнер (Map<Integer, List<T>>)

Set<keyType> keySet()

Collection<valueType> values()

interface Comparable<T>

Comparable

22

int compareTo(T o)

Возвращаемое значение типа int может быть >, =, < нуля

Integer a = 1;

Integer b = 2;

a.compareTo( b ) == -1; // true

a.compareTo( a ) == 0; // true

b.compareTo( a ) == 1; // true

Основные методы

class Collections

― набор статических методов для работы с контейнерамиCollections

Object max(Collection coll)

void copy (List dest, List src)

Object min(Collection coll)

void reverse(List list)

void shuffle(List list)

void sort(List list)

void swap(List list, int i, int j)

23

План лекции

24

1. Задача

2. Generics

3. Коллекции и карты

4. HttpSession

HttpSession

HttpSession session = request.getSession(); Long userId = (Long) session.getAttribute("userId");

if (userId == null) { userId = userIdGenerator.getAndIncrement(); session.setAttribute("userId", userId); }

String key = session.toString();

25

Спасибо за внимание

Виталий Чибриков chibrikov@corp.mail.ru