Upload
technopark
View
147
Download
0
Embed Size (px)
Citation preview
Углубленное программирование на Java
Лекция 1. «Введение»
Виталий Чибриков
Программирование и жизнь
Мой опыт: С++, С#, Java, PHP, HTML, SQL, JavaScript, Python, Shell, Perl
Более 9 000 000 регистраций в «Аллоды Онлайн» по всему миру
Игра переведена на 14 языков
Аллоды Онлайн: С++, Java, С#, Shell, Python
Игру оперируют 10 компаний
Результат вашей работы видят миллионы людей
Программируем НЕ на языке, а при помощи языка
Книги
С. Макконнелл «Совершенный код»П. Гудлиф «Ремесло программиста»
Структура курса
Углубленное
Java
Программирование
Java – ОО язык программирования разработанный в 1995г.
История Java
Изначально – платформа для программирования бытовых приборов
Компилляция в байт код и исполнение байт кода в виртуальной машинеВстроенный сборщик мусора
Платформа .Net от Microsoft осована на идеях Java
Задумка Java платформы
JVM для кофемашины JVM для стиральной машины
Архитектурно независимый байт код
Приложение
+ «Переносимые» программисты
Задачи и результат
Написанно один раз – работает везде
Безопасность исполнения
Встроенный сборщик мусора
- Сборщик мусора «всегда» работает в ненужное время
Ключевые идеи:
Результат:
- Программы все равно зависят от архитектуры
+ Сборщик мусора устраняет утечки памяти
Постоянные улучшения и доработки
Почему Java?
ОО язык высокого уровня с простым и понятным синтаксисом
Большое количество специалистов со знанием Java
Легкость перехода с С++Большое количество библиотек
Прекрасная документация
«Углубленное»
Примитивные типы, переполнение примитивных типов
Операторы
Преобразования примитивных типовВетвления и циклы
Углубленное значит «глубже чем»:
Объекты, классы, наследование, полиморфизм, инкапсуляция
Интерфейс, реализация интерфейса
Область видимости переменной, статические переменные
Стек, кучаprivate, protected, public
Платформа Java. Java editions. Java Virtual Machine.
«Углубленное»
Контейнеры и алгоритмы (Hash, Map, Set, List, Array)Многопоточность. Thread Object. Concurrency.
Message System. Address. Abonent.Frontend. Game Mechanics.
Resource System. Serialization. I/O. Stream.Reflection. Dependency injection. Annotation. Generics.
JDBC. DataSet. DAO. Hibernate.QA. Tests. Автоматизация тестрования.
Исключение, обработка исключений
Напишем сервер для online игрыВесь курс построен вокруг практической работы
Программирование
Теоретическая часть – общие знания по программированиюПрограммирование – теория выраженная на языке JavaПримеры реализации и разбор кода
Лекции
Практические занятия
Сдача ДЗ – демонстрация работы приложения
Надоело писать код? Играем в то, что написали!
Обзор платформы Java
Запуск приложенийJava Runtime Environment (JRE)
Java Virtual Machine(JVM)Class Libraries
Создание приложенийJava Development Kit (JDK)
JREJava compiler
IDE – в состав Java не входит
Обзор платформы Java
Interpreter
JVM
Just-In-Time (JIT) compilerByte code verifierGarbage collector (GC)
JavacПревращает *.java в *.class*.class можно собрать в *.jar (zip архив)
Сборщик мусора
Поиск ненужных объектов
Garbage collector (GC)
Освобождение памяти
Stack Heap
Типы ссылокStrong referencesWeak referencesSoft references
Java editions
Стандартная редакция
Java SE (Standard Edition)
JVM + библиотека классов
API + runtime environment services
Java SEJava EE (Enterprise Edition)
Спецификация
Java ME (Micro Edition)Мобильные телефоны, бытовые приборы
Сравнение java и C++
Нет разделения на *.cpp и *.h файлыОдин файл – один класс
Только классы (class, interface, enum)
Имя файла должно совпадать с именем классаНет указателей, только ссылкиВсе классы наследники от Object
Нет передачи константных ссылок с функцииНет оператора deleteНет перегрузки операторовReflection – информация о классе в runtimeКласс может наследовать один базовый класс
Наименования
Пакеты обычно собирают в *.jar файлы (zip архивы)Класс может быть однозначно идетифицирован по полному имени
Классы в java собирают в пакеты (packages)
packageName.directoryName.ClassNameИмена пакетов и директорий принято начинать с маленькой буквы
Имена классов: MySuperClassNameИмена функций: mySuperMethod()Имена переменных: myVariable
Пакеты не могут иметь циклических зависимостей
Запуск приложений
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”)
Tuning java приложений
Garbage collector
Memory
Runtime compiler
-Xmx, -Xms установка размера Heap-Xss установка размера Stack
-X параметры поддержаны не во всех JVM (поддержаны в HotSpot)-XX параметры «not stable»
-XX:+UseConcMarkSweepGC – сборка мусора без пауз
Настройка рабочего места
Java SE 6 Update 35 (JDK)http://www.oracle.com/technetwork/java/javase/downloads/
«Читаете» лицензионое соглашение и соглашаетесь с нимСкачиваете и устанавливаете пакет под вашу архитектуру
Eclipse IDE for Java Developershttp://www.eclipse.org/downloads/
JDK
Eclipse
Скачиваете и устанавливаете пакет под вашу архитектуру
Настройка рабочего места
jetty-all-7.0.2.v20100331.jar
servlet-api-2.5.jarПолный путь к библиотекам приведен на http://tp.mail.ru/blog/201.html
Jetty
Подключение: Project/Properties/Java Build Path/Libraries/Add external Jars
Master: http://wiki.eclipse.org/Jetty/Tutorial/Jetty_HelloWorld
Домашнее задание:
Beginner: Hello World на java
Спасибо за вниманиеВиталий Чибриков