Java осень 2014 занятие 2
-
Upload
technopark -
Category
Education
-
view
183 -
download
4
description
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
Спасибо за внимание
Виталий Чибриков [email protected]