32
Углубленное программирование на Java Лекция 1. «Введение» Виталий Чибриков

Java весна 2013 лекция 1

Embed Size (px)

Citation preview

Page 1: Java весна 2013 лекция 1

Углубленное программирование на JavaЛекция 1. «Введение»

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

Page 2: Java весна 2013 лекция 1

2

Программируем НЕ на языке, а при помощи языка

Результат вашей работы видят миллионы людей

Программирование и жизнь

Мой опыт: С++, С#, Java, PHP, HTML, SQL, JavaScript, Python, Shell, Perl

Почти 10 000 000 регистраций в «Аллоды Онлайн» по всему миру

Игра переведена на 14 языков

Аллоды Онлайн: С++, Java, С#, Shell, Python

Игру оперируют 10 компаний

Page 3: Java весна 2013 лекция 1

3

С. Макконнелл «Совершенный код»

П. Гудлиф «Ремесло программиста»

Книги

Page 4: Java весна 2013 лекция 1

4

План лекции

1. Java

2. Углубленное

4. Платформа Java

5. Запуск приложений

6. Домашнее задание

3. Программирование

Page 5: Java весна 2013 лекция 1

5

История Java

Java ― ОО язык программирования разработанный в 1995г.

Изначально ― платформа для программирования бытовых приборов

Компилляция в байт код и исполнение байт кода в виртуальной машине

Встроенный сборщик мусора

Платформа .Net от Microsoft осована на идеях Java

Page 6: Java весна 2013 лекция 1

6

JVM для кофемашиныJVM для стиральной

машины

Архитектурно независимый байт код

Приложение

Задумка Java платформы

Page 7: Java весна 2013 лекция 1

7

Написанно один раз – работает везде

Безопасность исполнения

Встроенный сборщик мусора

Ключевые идеи

Результат

Задачи и результат

+ «Переносимые» программисты

- Сборщик мусора «всегда» работает в ненужное время

- Программы все равно зависят от архитектуры

+ Сборщик мусора устраняет утечки памяти

Page 8: Java весна 2013 лекция 1

8

Постоянные улучшения и доработки

ОО язык высокого уровня с простым и понятным синтаксисом

Большое количество специалистов со знанием Java

Легкость перехода с С++

Большое количество библиотек

Прекрасная документация

Почему Java?

Page 9: Java весна 2013 лекция 1

9

План лекции

1. Java

2. Углубленное

4. Платформа Java

5. Запуск приложений

6. Домашнее задание

3. Программирование

Page 10: Java весна 2013 лекция 1

10

Углубленное значит «глубже чем»Примитивные типы, переполнение примитивных типов

Операторы

Преобразования примитивных типов

Ветвления и циклы

Объекты, классы, наследование, полиморфизм, инкапсуляция

Интерфейс, реализация интерфейса

Область видимости переменной, статические переменные

Стек, куча

private, protected, public

«Углубленное»

Page 11: Java весна 2013 лекция 1

11

Платформа Java. Java editions. Java Virtual Machine.

Контейнеры и алгоритмы (Hash, Map, Set, List, Array), Generics.

Многопоточность. Thread Object. Concurrency.

Message System. Address. Abonent.

Frontend. Game Mechanics.

Serialization. I/O. Stream.

Reflection. Annotation.

JDBC. DataSet. DAO. Hibernate.

QA. Tests. Автоматизация тестрования.

Исключение, обработка исключений

«Углубленное»

Page 12: Java весна 2013 лекция 1

12

План лекции

1. Java

2. Углубленное

4. Платформа Java

5. Запуск приложений

6. Домашнее задание

3. Программирование

Page 13: Java весна 2013 лекция 1

Напишем сервер для online игры

Весь курс построен вокруг практической работы

Теоретическая часть – общие знания по программированию

Программирование – теория выраженная на языке Java

Примеры реализации и разбор кода

Лекции

Практические занятия

Программирование

13

Сдача ДЗ – демонстрация работы приложения

Надоело писать код? Играем в то, что написали!

Page 14: Java весна 2013 лекция 1

14

ЛЕКЦИЯ №1. «ВВЕДЕНИЕ»

ЛЕКЦИЯ №2. «МНОГОПОТОЧНОСТЬ»

ЛЕКЦИЯ №3. «MESSAGE SYSTEM»

ЛЕКЦИЯ №4. «ИГРОВАЯ МЕХАНИКА»

ЛЕКЦИЯ №5. «ТЕСТИРОВАНИЕ И НАГРУЗКА»

ЛЕКЦИЯ №6. «I/O»

ЛЕКЦИЯ №7. «РЕСУРСНАЯ СИСТЕМА»

ЛЕКЦИЯ №8. «РАБОТА С БАЗАМИ ДАННЫХ»

ЛЕКЦИЯ №9. «ORM»

1

2

3

4

Road map

Page 15: Java весна 2013 лекция 1

15

Модули учебного сервера

utils

gameMechanics

base

messageSystem

frontend

main

dbService

resourceSystem

Page 16: Java весна 2013 лекция 1

16

Нет разделения на *.cpp и *.h файлы

Один файл – один класс

Только классы (class, interface, enum)

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

Нет указателей, только ссылки

Все классы наследники от Object

Нет передачи константных ссылок в функции

Нет оператора delete, создание объекта только через new

Нет перегрузки операторов

Reflection – информация о классе в runtime

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

Сравнение java и C++

Page 17: Java весна 2013 лекция 1

17

Анонимный тест

Page 18: Java весна 2013 лекция 1

18

План лекции

1. Java

2. Углубленное

4. Платформа Java

5. Запуск приложений

6. Домашнее задание

3. Программирование

Page 19: Java весна 2013 лекция 1

19

Обзор платформы Java

Запуск приложенийJava Runtime Environment (JRE)

Java Virtual Machine(JVM)

Class Libraries

Создание приложенийJava Development Kit (JDK)

JRE

Java compiler

IDE – в состав Java не входит

Page 20: Java весна 2013 лекция 1

20

Обзор платформы Java

JVM

Javac

Interpreter

Just-In-Time (JIT) compiler

Byte code verifier

Garbage collector (GC)

Превращает *.java в *.class

*.class можно собрать в *.jar (zip архив)

Page 21: Java весна 2013 лекция 1

21

Сборщик мусора

Garbage collector (GC)

Типы ссылок

Поиск ненужных объектов

Освобождение памяти

Strong references

Weak references

Soft references

Stack Heap

Page 22: Java весна 2013 лекция 1

22

Java editions

Java SE (Standard Edition)

Стандартная редакция

JVM + библиотека классов

Java EE (Enterprise Edition)

API + runtime environment services

Java SE

Спецификация

Java ME (Micro Edition)Мобильные телефоны, бытовые приборы

Page 23: Java весна 2013 лекция 1

23

Пакеты обычно собирают в *.jar файлы (zip архивы)

Класс может быть однозначно идетифицирован по полному имени

Классы в Java собирают в пакеты (packages)

packageName.directoryName.ClassName

Имена пакетов и директорий принято начинать с маленькой буквы

Имена классов: MySuperClassName

Имена функций: getMyVariable()

Имена переменных: myVariable

Пакеты не могут иметь циклических зависимостей

Наименования

Page 24: Java весна 2013 лекция 1

24

План лекции

1. Java

2. Углубленное

4. Платформа Java

5. Запуск приложений

6. Домашнее задание

3. Программирование

Page 25: Java весна 2013 лекция 1

25

java [ options ] class [ args... ]

java [ options ] -jar file.jar [ args... ] + Main class in manifest header

public static void main(String args[]){…}

options (наиболее используемые):

-classpath classpath путь к директории с классами приложения

-Xmsn стартовый размер Heap (например, -Xms256m) , default 2m

-Xmxn максимальный размер Heap (например, -Xmx1024m), default 64m

-Dproperty=value можно получить в коде - System.getProperty(“property”)

Запуск приложений

Page 26: Java весна 2013 лекция 1

26

Garbage collector

Memory

-Xmx, -Xms установка размера Heap

-Xss установка размера Stack

-X параметры поддержаны не во всех JVM (поддержаны в HotSpot)-XX параметры «not stable»

-XX:+UseConcMarkSweepGC – сборка мусора без пауз

Tuning java приложений

Page 27: Java весна 2013 лекция 1

27

План лекции

1. Java

2. Углубленное

4. Платформа Java

5. Запуск приложений

6. Домашнее задание

3. Программирование

Page 28: Java весна 2013 лекция 1

28

Настройка рабочего места

JDK

Eclipse

Java SE 6 Update 39 (JDK)

http://www.oracle.com/technetwork/java/javase/downloads/

«Читаете» лицензионое соглашение и соглашаетесь с ним

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

Eclipse IDE for Java Developers

http://www.eclipse.org/downloads/

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

Page 29: Java весна 2013 лекция 1

29

Настройка рабочего места

Jettyjetty-all-7.2.0.RC0.jar

servlet-api-2.5.jar

Полный путь к библиотекам приведен на http://tp.mail.ru/blog/201.html

Подключение: Project/Properties/Java Build Path/Libraries//Add external Jars

Page 30: Java весна 2013 лекция 1

30

Первое задание состоит из 3-х шагов

Домашнее задание

Hint: http://wiki.eclipse.org/Jetty/Tutorial/Jetty_HelloWorld

Шаг 1: Написать «Hello World!» — приложение можно запустить и оно выводит в лог - «Hello World!».

Шаг 2: Написать «Hello Server!» — приложение запускает jetty server (на localhost:8080). В браузе можно открыть страничку localhost:8080 и увидеть строку «Hello Server!».

Шаг 3: Изменить страницу, которую возвращает сервер так, чтобы она перегружала себя раз в секунду. Вынести создание страницы в отдельный класс (PageGenerator).

Hint: body onload='setInterval(function(){refresh()} function refresh(){location.reload(true);}

Page 31: Java весна 2013 лекция 1

31

1. История и особенности языка Java

2. Платформа Java. Java Editions. GC, JVM, JDK, JRE. Bytecode

3. Правила наименований пакетов, классов, переменных и методов. Запуск java приложений

Билеты

Page 32: Java весна 2013 лекция 1

Спасибо за вниманиеВиталий Чибриков

[email protected]