Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов
Лекция 3. «Beyond the C». Объектно-ориентированное программирование в Java
Развитие технологии программирования Программирование в терминах операторов Программирование в терминах процедур и функций Программирование в терминах классов
Основной принцип программиста KISS Keep It Sweet and Simple Keep It Simple Stupid
Абстрактные типы данных АТД – набор данных и операций для работы с ними. Примеры АТД: Строки в Java Cтек, очередь
Абстрактные типы данных: зачем? Группировка родственных операций и данных Упрощение за счет построения более высокого уровня абстракции Возможность моделировать сущности реального мира Изоляция сложности. Упрощение за счет сокрытия деталей реализации Повышение удобочитаемости и понятности кода Ограничение влияния изменений Локальность изменений кода => Снижение сложности
Реализация АТД в Java Классы
Реализация АТД в Java Объекты
Реализация АТД в Java Классы и Объекты
Описание класса
Пример описания класса public class Spot { // переменные – члены класса public int x, y; private int size; // конструктор public Spot() { x = -1; y = -1; size = 1; } // методы – члены класса public void setSize(int newSize) { if (newSize >= 0) { size = newSize; } public int getSize() { return size; } }
Пример создания объекта класса private Spot spot = null; spot = new Spot(); System.out.println(spot.getSize());
Жизненный цикл объекта Описание класса public class MyClass { int me; MyClass () { me = 1; } Описание переменной, которая будет ссылаться на объект класса MyClass myobject; Создание объекта класса и инициализация объекта класса myobject = new MyClass(); Удаление объекта: garbage collector, finalize
Описание переменных - членов класса ЭлементЗначение accessLevel (Optional) Access level for the variable static (Optional) Declares a class variable final (Optional) Indicates that the variable is a constant type name Тип и имя переменной public static final int myVar;
Описание методов - членов класса public int setMe(int me) { this.me = me; return this.me; } ElementFunction accessLevel (Optional) Access level static (Optional) Declares a class method abstract (Optional) Indicates that the method is not implemented final (Optional) Indicates that the method cannot be overridden
Контроль доступа SpecifierClassPackageSubclassWorld private YNNN no specifier YYNN protected YYYN public YYYY
Статические члены класса public class AClass { public int instanceInteger = 0; public int instanceMethod() { return instanceInteger; } public static int classInteger = 0; public static int classMethod() { return classInteger; }
Наследование классов
Иерархия наследования
Пример наследования public class Animal { public void override() { System.out.println("in Animal."); } public class Cat extends Animal { public void override() { System.out.println("in Cat."); }
Использование super при наследовании public class Subclass extends Superclass { //hides aVariable in Superclass public boolean aVariable; public void aMethod() { //overrides aMethod in Superclass aVariable = false; super.aMethod(); System.out.println(aVariable); System.out.println(super.aVariable); }
Реализация АТД в Java Интерфейсы Интерфейс определяет тип данных Интерфейс – именованный набор объявлений методов Интерфейс определяет внешнее представление АТД, с которым работает тот, кто использует класс.
Описание интерфейсов
Пример использования интерфейсов public interface StockWatcher { void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue); } public class StockApplet implements StockWatcher { public void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue) { switch (tickerSymbol) { case SUNW:... break; case CSCO:... break; default:... break; }
Пакеты, классы и файлы package su.msu.cs.lvk.portal.dao; import java.sql.Connection; import java.util.ArrayList; import java.util.List; import org.springframework.jdbc.datasource.DataSourceUtils; public class AdmissionDAO { private DataSource dataSource; public Admission load(long id) throws SQLException { Connection conn = DataSourceUtils.getConnection(dataSource); … > ls su/msu/cs/lvk/portal/dao/ AdmissionDAO.java