Слайд 1Основы программирования - Java
ФИСТ 1 курс
Власенко Олег Федосович
Лекция 3
ООП. Основные
понятия
Слайд 2Неформальное введение в ООП
( Again )
Слайд 17UML – диаграмма классов
UML = Unified Modeling Language
Слайд 18источник вдохновения
http://www.slideshare.net/smirik/ruby-11754239
Слайд 20Перевод числа
из 10-й системы счисления в 2-ую
Пример:
N = 12
N
% 2 = 12 % 2 = 0 0 N
= N / 2 = 12 / 2 = 6 N > 0 +
N % 2 = 6 % 2 = 0 0 N = N / 2 = 6 / 2 = 3 N > 0 +
N % 2 = 3 % 2 = 1 1 N = N / 2 = 3 / 2 = 1 N > 0 +
N % 2 = 1 % 2 = 1 1 N = N / 2 = 1 / 2 = 0 N > 0 -
Полученные цифры нужно вывести в обратном порядке:
1100
Слайд 21Реализация через StringBuilder
public class Lect5Main1 {
public static void main(String[] args)
{
int num = 49;
StringBuilder str = new StringBuilder();
do {
int binDigit
= num % 2;
char binChar = binDigit == 0 ? '0' : '1';
str.append(binChar);
num = num / 2;
} while (num > 0);
str.reverse();
System.out.println(str.toString());
}
}
Слайд 22Реализация через стек
public class Lect5Main2 {
public static void main(String[] args)
{
int num = 129;
StackChar stack = new StackChar(32);
do {
int
binDigit = num % 2;
char binChar = binDigit == 0 ? '0' : '1';
stack.push(binChar);
num = num / 2;
} while (num > 0);
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
System.out.println();
}
}
Слайд 24Реализуем стек
public class StackChar {
private char [] stack;
private int top;
public
StackChar(int size) {
stack = new char[size];
top = 0;
}
public void push(char
ch) {
stack[top] = ch;
top++;
}
public char pop() {
top--;
return stack[top];
}
public boolean isEmpty() {
return top == 0;
}
}
Слайд 25Реализация через стек (Again)
public class Lect4Main2_v2 {
public static void main(String[]
args) {
int num = 129;
StackChar stack = new StackChar(32);
do
{
int binDigit = num % 2;
char binChar = binDigit == 0 ? '0' : '1';
stack.push(binChar);
num = num / 2;
} while (num > 0);
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
System.out.println();
}
}
Слайд 26Интерфейс
Интерфе́йс (англ. interface) — общая граница между двумя функциональными объектами, требования к
которой определяются стандартом;
совокупность средств, методов и правил взаимодействия (управления,
контроля и т.д.) между элементами системы. (https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81 )
Интерфейс это совокупность методов и правил взаимодействия элементов системы. Другими словами интерфейс определяет как элементы будут взаимодействовать между собой.
Интерфейс двери – элементы: ручка, замок
Интерфейс автомобиля – элементы: руль, педали, рычаг коробки передач.
Когда вы используете эти "объекты" вы уверены в том что вы сможете использовать их подобным образом. Благодаря тому что вы знакомы с их интерфейсом
Слайд 27Интерфейс IStackChar
public interface IStackChar {
void push(char ch);
char pop();
boolean isEmpty();
}
Слайд 28реализация стека №1
public class StackChar1 implements IStackChar {
private char []
stack;
private int top;
public StackChar1(int size) {
stack = new char[size];
top =
0;
}
@Override
public void push(char ch) {
stack[top] = ch;
top++;
}
…
}
Слайд 29реализация стека №2
import java.util.ArrayList;
public class StackChar2 implements IStackChar {
ArrayList stack;
public
StackChar2(int size) {
stack = new ArrayList(size);
}
@Override
public void push(char ch) {
stack.add(ch);
}
…
}
Слайд 30реализация стека №2 (ч 2)
public class StackChar2 implements IStackChar {
ArrayList
stack;
…
@Override
public char pop() {
int lastIndex = stack.size() - 1;
char ch
= stack.get(lastIndex);
stack.remove(lastIndex);
return ch;
}
@Override
public boolean isEmpty() {
return stack.isEmpty();
}
}
Слайд 31Решение с интерфейсом
public class Lect4Main2_v3 {
public static void main(String[] args)
{
int num = 26;
//IStackChar stack = new StackChar1(32);
IStackChar stack
= new StackChar2(32);
do {
int binDigit = num % 2;
char binChar = binDigit == 0 ? '0' : '1';
stack.push(binChar);
num = num / 2;
} while (num > 0);
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
System.out.println();
}
}
Слайд 34Модификаторы доступа
private: члены класса доступны только внутри класса;
«default» (package-private) (модификатор,
по-умолчанию): члены класса видны внутри пакета;
protected: члены класса доступны внутри
пакета и в наследниках;
public: члены класс доступны всем;
Слайд 35Модификаторы доступа
static - ссылка этого поля у любого экземпляра класса
будет ссылаться на одно и то же значение
final – это
модификатор, позволяющий объявлять константные поля в классе.
Слайд 36Элементы класса
public class Sample {
private int x; //
переменная экземпляра класса
private int y = 0; //
переменная экземпляра класса
public final int CURRENT_YEAR = 2012; // константа
protected static int bonus; // переменная класса
static String version = "Java SE 7"; // переменная класса
protected Calendar now;
public int method(int z) {
return z++;
}
}
Слайд 37Примеры использования статических методов
public class StaticSamples {
public static void main(String[]
args) {
double phi = Math.PI / 6;
System.out.printf("sin(%f)=%f\n", phi, Math.sin(phi));
phi =
Math.PI / 4;
System.out.printf("tan(%f)=%f\n", phi, Math.tan(phi));
phi = Math.PI / 2;
System.out.printf("tan(%f)=%f\n", phi, Math.tan(phi));
System.out.printf("sin(%f)=%f\n", phi, Math.sin(phi));
System.out.printf("cos(%f)=%f\n", phi, Math.cos(phi));
}
}
Слайд 38Конструкторы
public class Quest {
// конструктор без параметров (по
умолчанию)
public Quest() {
System.out.println("Вызван конструктор
без параметров!!!");
}
// конструктор с параметрами
public Quest(int idc, String txt) {
super(); /* вызов конструктора супер класса явным образом необязателен, компилятор вставит его автоматически*/
System.out.println("Вызван конструктор c параметрами!!!");
System.out.println(id + " " + text);
}
}
Слайд 39Порядок
инициализации класса
public class Department {
{ System.out.println("logic"); };
//2
static { System.out.println("static logic"); } //1
private int id = 7;
public Department(int d) {
id = d;
System.out.println("конструктор"); //3
}
int getId() { return id; }
{ id = 10; System.out.println("logic"); } //2
}
Слайд 40Абстрактный класс
public abstract class AbstractCourse {
private String name;
public AbstractCourse() {
}
public abstract void
changeTeacher(int id); /*определение метода отсутствует */
public void setName(String n) {
name = n;
}
}
Слайд 41Особенности
наследования в Java
public class ArrayList extends AbstractList implements List,
RandomAccess, Cloneable, Serializable {
…
}
Внимание: В Java класс наследуется от ОДНОГО
класса, но реализует произвольное количество интерфейсов.
Слайд 42Литература
http://www.slideshare.net/smirik/ruby-11754239 (источник вдохновения - наследование)
http://hashcode.ru/questions/136909/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B-%D0%B2-%D0%BE%D0%BE%D0%BF-java-%D0%BF%D0%BE-%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%BC%D1%83 (источник вдохновения - интерфейсы)
Слайд 43Спасибо за внимание!
Власенко Олег Федосович
E-mail: vlasenko.oleg@gmail.com
Vk: vk.com/oleg.f.vlasenko
Телефон: 8 902 246
05 47