Типы данных и основы ООП Андрей Дмитриев andrei.dmitriev@oracle.com.

Презентация:



Advertisements
Похожие презентации
Типы данных и основы ООП Андрей Дмитриев Sun Microsystems Октябрь 2009.
Advertisements

Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
Java. Part 2. Спецификаторы доступа public private protected не указан – доступ в пределах пакета Могут использоваться перед классами, методами, полями.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Типы данных Инна Исаева. Переменные Переменная - это как ящик, в котором можно хранить данные. Каждая переменная имеет своё имя, она служит для хранения.
Тип, имя и значение переменной. В объектно-ориентированных языках программирования переменные играют такую же важную роль, как и в процедурных языках.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Переменные, величины Переменные, величины Типы, имена переменных Типы, имена переменных Хранение величин Хранение величин Переменные, величины Переменные,
Существует три разновидности комментариев: комментарии в одной строке, комментарии в нескольких строках, комментарии для документирования. Комментарии,
Лекция 1 по дисциплине «Программные средства математических расчетов» тема: «Основы языка С++» гр. 8Е31 Мамонова Татьяна Егоровна
Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Лекция 2 С => C++ => C# Большие и маленькие буквы различаются (main, Main, MAIN, mAin – разные имена) После каждого оператора ставится точка с запятой.
Лекция 30. Преобразования типов в C++ Красс Александр СПбГУ ИТМО, 2009.
Лекция 2 Типы данных в Java Основные типы – простой и объектный.
Алфавит и синтаксис языка программирования Visual Basic.
Данные в программах и алгоритмах Программы и их алгоритмы пишутся для обработки данных. Чтобы реализовать алгоритм, программам необходимо работать с данными.
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Переменные и основные типы переменных на JAVA Выполнил учитель информатики и ИКТ МБОУ СОШ р.п. Евлашево Горелочкин Н.К.
Транксрипт:

Типы данных и основы ООП Андрей Дмитриев

Что такое тип данных?

Тип данных Спектр значений Набор допустимых операций

Программа Примитивные и ссылочные типы. Размеры данных. Преобразование и приведение типов. Массивы. Основы ООП.

Примитивные и ссылочные типы Язык Java является объектно-ориентированным, но существуют типы данных (простые/примитивные), не являющиеся объектами. > Фактор производительности. Простые типы делятся на 4 группы: > целые: int, byte, short, long > числа с плавающей точкой: float, double > символы: char > логические: boolean Введение в синтаксис языка классов позволяет создавать свои типы, получившие название ссылочных.

Примитивные типы DoubleIEEE754 64double Void---void FloatIEEE754 32float Long2^63-1-2^6364long Integer2^31-1-2^3132int Short2^15-1-2^1516short Byte byte CharacterU2^16-1Unicode 016char Boolean---boolean Класс- оболочка Макс. значение Мин. значение Размер(бит) Примитивный тип

Размер типа данных Размер одинаков для всех платформ; за счет этого становится возможной переносимость кода. Размер boolean неопределен. Указано, что он может принимать значения true или false.

Значения по умолчанию 0.0ddouble 0.0ffloat 0Llong 0int (short)0short (byte)0byte '\u0000' (null)char falseboolean Значение по умолчаниюПримитивный тип Неинициализированная явно переменная (член класса) примитивного типа принимает значение в момент создания:

Использование значения по умолчанию Значение по умолчанию может быть неразрешенным в конкретной программе. Рекомендуется присвоение значения в момент создания переменной: int i = 0; Неинициализированная локальная переменная – ошибка компиляции.

Классы-оболочки Часто переменные примитивных типов должны быть использованы к качестве объектов. Для каждого примитивного типа Java в пакете java.lang существует класс-оболочка: Long, Integer, Float,… Класс-оболочка – немодифицируемый класс char symbol = 'x'; Character symbol = new Character(c);

Числа с высокой точностью Предназначены для проведения расчетов без потери точности. Не имеют примитивных аналогов. BigInteger – для представления длинных целых чисел. BigDecimal – для представления больших чисел с плавающей точкой.

Приведение типов Приведение – это изменение типа (автоматическое или явное). Явное приведение позволяет : сделать тип преобразования более точным. форсировать преобразование, если оно не может быть выполнено автоматически.

Расширяющее преобразование int x = 200; long y = (long)x; long value = (long)200; //необязательно, т.к. компилятор делает это автоматически Результирующий тип имеет больший диапазон значений, чем исходный тип:

Сужающее преобразование long value = 1000L; int value2 = (int)value; //обязательно. Иногда это единственный способ сделать код компилируемым Результирующий тип имеет больший диапазон значений, чем исходный тип.

Приведение ссылочных типов Java позволяет проводить приведение от любого примитивного типа к любому примитивному типу, за исключением boolean. Для классов действуют несколько другие правила приведения.

Литералы Литерал - это конкретное значение, присвоенное или использованное в выражении: //использование при присвоении int i1 = 0; char c = 2; //использование при сравнении if (c == 1) { //использование в бинарной операции i1 = i ; }

Литералы (cont.) // восьмеричное представление (ведущий ноль) int i3 = 0177; // суффикс для long long n1 = 200L; //рекомендуется пользоваться заглавной L long n2 = 200l; Для числовых типов можно указывать систему счисления и тип литерала. По умолчанию тип литерала – int.

Литералы (cont.) float f1 = 1; float f2 = 1F; // суффикс для float float f3 = 1f; // суффикс для float float f4 = 1e-45f; // 10 - основание степени double d1 = 1d; // суффикс для double double d2 = 1D; // суффикс для double double d3 = 47e47d; //10 - основание степени Для литералов чисел с плавающей точкой можно указывать тип литерала и задавать экспоненциальную запись числа.

Символы и кодировки Печатные символы можно записать в апострофах: ' а ', ' N ', ' ? '. Код любого символа с десятичной кодировкой от 0 до 255 можно задать, записав его не более чем тремя цифрами в восьмеричной системе счисления в апострофах после обратной наклонной черты: – ' \123 ' буква S, – ' \346 ' буква Ж в кодировке СР1251. – Наибольший код ' \377 ' десятичное число 255. Код любого символа в кодировке Unicode набирается в апострофах после обратной наклонной черты и латинской буквы u ровно четырьмя шестнадцатеричными цифрами: – ' \u0053 ' буква S, – ' \u0416 ' буква Ж.

Символы и кодировки (продолжение) Прописные русские буквы в кодировке Unicode занимают диапазон: – от ' \u0410 ' заглавная буква А, – до ' \u042F ' заглавная Я. Строчные буквы: – от ' \u0430 ' а, – до ' \u044F ' я. В какой бы форме ни записывались символы, компилятор переводит их в Unicode, включая и исходный текст программы. Компилятор и исполняющая система Java работают только с кодировкой Unicode.

Управляющие символы Значение Код ASCII Запись символа апостроф' \' ' кавычка' \" ' обратная наклонная черта' \\ ' символ горизонтальной табуляции НТ ' \t ' символ возврата на шаг BS' \b ' символ перевода страницы FF' \f ' символ возврата каретки CR' \r ' символ перевода строки newline' \n '

Ссылочные типы данных Программист имеет возможность создавать свои ссылочные типы. String s; //создание ссылки s = Hello; //присвоение значения String s1 = new String(World); Для большинства классов используется оператор new:

Константы Переменные с неизменяемыми значениями называются константами. final int MAXIMUM_SPEED = 250;

Операции Выделяют четыре типа: – арифметические, – поразрядные, – отношений, – логические.

Арифметические операции Остаток от деления% Инкремент.++ Декремент.-- Деление/ Умножение* Вычитание- Сложение+ Операнды должны иметь числовой тип. Можно использовать операции на типе char.

Поразрядные (bitwise) операции Действуют на индивидуальные биты. Применяются для числовых операндов. Сдвиг вправо>> Сдвиг влево>> Исключающее ИЛИ^ ИЛИ| И& Отрицание~

Операции отношений Определяют отношения, которые один операнд имеет к другому. Больше или равно>= Меньше или равно Не равно!= Равно==

Логические операции Работают только с типом boolean. Исключающее ИЛИ^ Не равно!= Троичная условная операция ?: Равно== Отрицание! ИЛИ|| И&&

Размещение сущностей Переменная может быть размещена в одном из двух хранилищ: Стек – расположен в памяти VM и имеет поддержку в виде указателя стека. Куча (heap) – область памяти VM, в которой хранятся все ссылочные типы. Переменной простого типа выделяется память в стеке. Ссылки располагаются в куче.

Массивы Для хранения нескольких однотипных значений используется ссылочный тип – массив: //примитивный тип, размер массива задан явно int price[] = new int[10]; //неявное задание размера int rooms[] = new int[]{1, 2, 3}; //содержит ссылочные переменные Item [] items = new Item[10]; Item [] undefinedItems = new Item[]{ new Item(1), new Item(2), new Item(3)};

Доступ к элементам массива for (int i = 0; i < undefinedItems.length; i++){ // должен быть представим в виде // строки (переопределен метод // toString()) System.out.println(undefinedItems[i]); } Доступ осуществляется по индексу. Размер хранится в немодифицируемом поле массива length.

Многомерный массив Является массивом массивов. Многомерный массив концептуально представляет собой многомерную матрицу. int twoDim [][] = new int[4][5];

Массив массивов Каждый из массивов может иметь отличную от других длину. int twoDim [][] = new int[4][]; twoDim[0] = new int [10]; twoDim[1] = new int [20]; twoDim[2] = new int [30]; twoDim[3] = new int [100];

Ошибки времени выполнения public class Main { public static void main(String[] args) { int array [] = new int[]{1, 2, 3}; System.out.println(array[3]); } //попытка обратиться к несуществующему //индексу: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Main.main(Main.java:27) Обращение к несуществующему индексу массива отслеживается виртуальной машиной во время исполнения кода:

Ошибки времени выполнения (cont.) Object x[] = new String[3]; //попытка поместить в массив содержимое //несоответствующего типа x[0] = new Integer(0); Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer at Main.main(Main.java:22) Попытка поместить в массив неподходящий элемент пресекается виртуальной машиной:

Строки Класс java.lang.String представляет собой хранилище символов и функциональность для работы с ними. Строка имеет фиксированную длину и не завершается специальным символом. Возможности: –обращение к символу по его номеру, –поиск, –выделение подстроки, –изменение регистра, –и т.п. Объект класса String – неизменяем.

Основы ООП Инкапсуляция (сокрытие данных) - объединение в одной сущности данных и методов работы с ними. Наследование – возможность класса-наследника приобретать признаки класса-предка. Полиморфизм – способность наследников по-другому реализовывать возможности предков. Объект способен проявлять признаки своего предка.

Инкапсуляция Состояние объекта определяется значениями его полей. Сокрытие данных осуществляется с помощью установки модификаторов, влияющих на видимость членов класса. В языке Java используется несколько уровней сокрытия.

Модификаторы доступа полей Нет модификатора – данное поле доступно отовсюду в данном пакете. public – поле доступно отовсюду. private - поле доступно только в данном классе. protected - поле доступно в данном классе и во всех его наследниках.

Полиморфизм class Animal { void talk(){…}; } class Dog extends Animal { void talk() { System.out.println("Woof!"); } } class Cat extends Animal { void talk() { System.out.println("Meow!"); } } Экземпляр класса может выступать как экземпляр любого класса-предка данного класса.

Полиморфизм (cont.) Animal myDog = new Dog(); Animal myCat = new Cat(); Экземпляр класса Dog или Cat одновременно является экземпляром класса Animal:

Наследование Наследование - это такое отношение между классами, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или других классов (множественное наследование).

Ромбическое наследование abstract class Animal { abstract void talk(); } class Frog extends Animal { void jump() { //прыгать} } class Bird extends Animal { void fly() {//летать } } //ошибка, разрешено наследоваться только от одного класса. class FlyingFrog extends Frog, Bird{…} Класс не может приобретать свойства нескольких других классов через механизм наследования:

Ромбическое наследование (cont.) interface Flying { void fly(); } class Frog { void jump() { //прыгать} } class Bird implements Flying{ void fly() {//летать } } class FlyingFrog extends Frog implements Flying{…} //разрешено Для передачи свойств сразу от нескольких сущностей был введен новый тип данных – интерфейс. Использую дополнительную сущность, можно добиться того же результата как и при множественном наследовании:

Тест Может ли конструктор класса быть помеченным модификатором private? Можно ли значение переданного в метод параметра модифицировать так, что бы изменилось его значение в контексте вызывающего метода?

Правда ли что… В Java нет специальных обозначений для бинарного представления литералов, например : int t = B; Литерал 47e47d имеет значение 47*10^47 и имеет тип double? char может хранить символы в Unicode формате?

Ссылки Ekkel B. Thinking in Java (Философия Java)

Questions & Answers Q UESTIONS A NSWERS &