Классы и Объекты в Java Основы ООП Немного синтаксиса • Java является строго типизированным языком. • Java имеет СИ-подобный синтаксис. • Все типы данных разделяются на две группы • Простые или примитивные(8 штук) • Объектные или ссылочные Немного синтаксиса Простые: • целочисленные – byte – short – int – long – char • дробные – float – double • булевые – Boolean Ссылочные: – Переменная ссылочного типа имеет значение либо null, либо ссылку, указывающую на некоторый объект в виртуальной памяти JVM. Немного синтаксиса С++ Java void swap(int *a, int *b){ int *temp = a; a = b; public static void swap( b = temp; AtomicInteger a, AtomicInteger } b) ? { a.set(b.getAndSet(a.get())); } Парадигмы программирования • Императивное программирование(алгоритмическое) • Структу́рное программи́рование • Объектно-ориентированное программирование Объекты – ключевое понятие объектно-ориентированных технологий оглядитесь: мы живём в мире взаимодействующих объектов! Каждый объект характеризуется состоянием и поведением Программные объекты • Объекты в программных системах – аналоги объектов в реальном мире • Состояние хранится в полях • Методы изменяют состояние объекта • Поведение доступно через методы Сокрытие внутреннего состояния объекта от посторонних глаз называется инкапсуляцией. Единственный способ изменить это состояние – вызвать метод объекта. Программные объекты Состояние: • Скорость движения • Скорость вращения колёс • Конфигурация шестерней Поведение: • Переключить передачи • Затормозить • Изменить темп Уникальность: • Номер автомобиля Программные объекты Основные преимущества: • Модульность • Повторное использование кода • Сокрытие внутреннего представления • Расширяемость и простота отладки Класс – множество объектов, имеющих схожее поведение и свойства Класс – велосипед, объекты – мой вел, вел Хемуля, … Классы и объекты в Java • Заголовок класса • Тело класса Поля Методы Конструкторы Инициализаторы Классы и объекты в Java • Каждому public классу – свой файл • Поля и методы могут чередоваться • Реализация метода не отделяется от объявления метода Классы и объекты в Java package com.netcracker.msu; public class Product { private int price; public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } } Классы и объекты в Java Модификаторы доступа в Java: • private – доступ имеют только объекты данного класса • По умолчанию(default) – package protected, то есть все классы из данного пакета имеют доступ • protected – доступ имеют объекты данного класса, все объекты классов-потомков и все классы из данного пакета • public – доступ имеют все Классы и объекты в Java • Модификатор доступа помещается перед каждым членом класса (не перед группой) • Все поля класса стоит помечать как private или protected • Хотя бы некоторые методы стоит помечать как public Вообще, рекомендуется скрывать данные, и предоставлять методы для изменения состояния (как и в реальном мире) Static Members • Члены объекта (Instance Members) – Принадлежат экземпляру класса (поля и методы в обычном понимании) • Члены класса (Class Members) – Принадлежат классу (могут быть использованы и без экземпляра класса) – Внутри статических методов нельзя обращаться к нестатическим членам Конструкторы public class A { public A(){ return; System.out.println("Create instance"); } } Static Members class Human { private static int totalCount; public static int getTotalCount(){ return totalCount; } } … Human h=null; h.getTotalCount(); Human.getTotalCount(); … Инициализаторы • Статический(при загрузке класса) • Объектный(при создании экземпляра класса) class Human { static { sout("Class loaded"); } { sout("New instance"); } } Как именовать классы, поля, методы? СamelСase: • UpperCamelCase – классы • lowerCamelCase – методы, и переменные EXAMPLE_CONSTANT - константы Запуск приложения public class ClassWithMainMethod { public static void main(String[] args) { … } } Организация пространств имён • • • • Аналог пространства имён в Java – пакет (package) Пакеты имеют иерархическую структуру Обычно именуются маленькими буквами Одному пакету соответствует одна директория в файловой системе Распространение приложений • Форма распространения java-приложений – JAR-архив • Идеологически – набор кода и данных, которые нужны приложению для работы • Технически – zip-архив с байт-кодом, ресурсами и метаданными (манифестом) Запуск приложения: $ java -jar my-app.jar Распространение приложений Файл META-INF/MANIFEST.MF: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.1 Created-By: 1.5.0_20-141 (Company Inc.) Main-Class: com.sun.sample.ClassWithMainMethod