Принципы объектно-ориентированного проектирования

Содержание

Слайд 2

C/C++ Assembler Java HTML CSS XML JavaScript PHP SQL HTTP VCL

C/C++

Assembler

Java

HTML

CSS

XML

JavaScript

PHP

SQL

HTTP

VCL

WinAPI

POSIX

FTP

POP3

SMTP

ActionScript

VBA

Слайд 3

C/C++ Assembler Java HTML CSS XML JavaScript PHP SQL HTTP VCL

C/C++

Assembler

Java

HTML

CSS

XML

JavaScript

PHP

SQL

HTTP

VCL

WinAPI

POSIX

FTP

POP3

SMTP

ActionScript

VBA

Слайд 4

императивное программирование структурное программирование процедурное программирование функциональное программирование объектно-ориентированное программирование

императивное
программирование

структурное
программирование

процедурное
программирование

функциональное
программирование

объектно-ориентированное
программирование

Слайд 5

императивное программирование структурное программирование процедурное программирование функциональное программирование объектно-ориентированное программирование

императивное
программирование

структурное
программирование

процедурное
программирование

функциональное
программирование

объектно-ориентированное
программирование

Слайд 6

Принципы объектно-ориентированного программирования Принцип единственной ответственности Принцип открытости / закрытости Принцип

Принципы объектно-ориентированного программирования

Принцип единственной ответственности
Принцип открытости / закрытости
Принцип подстановки Лисков
Принцип изоляции

интерфейса
Принцип инверсии зависимостей
Слайд 7

Принцип единственной ответственности Только потому, что Вы можете, еще не значит,

Принцип единственной ответственности

Только потому, что Вы можете, еще не значит, что

вы должны это сделать

S

Слайд 8

Пример class Network { byte[] receiveByTcp() { } byte[] receiveByUdp() {

Пример

class Network {
byte[] receiveByTcp() {
}
byte[] receiveByUdp() {
}

void sendByTcp(byte[] data) {
}
void sendByUdp(byte[] data) {
}
}
Слайд 9

Пример class TcpNetwork { byte[] receive() { } void send(byte[] data)

Пример

class TcpNetwork {
byte[] receive() {
}
void send(byte[] data) {

}
}
class UdpNetwork {
byte[] receive() {
}
void send(byte[] data) {
}
}
Слайд 10

class TcpNetworkReceiver { byte[] receive() { } } class TcpNetworkSender {

class TcpNetworkReceiver {
byte[] receive() {
}
}
class TcpNetworkSender {
void send(byte[]

data) {
}
}
class UdpNetworkReceiver {
byte[] receive() {
}
}
class UdpNetworkSender {
void send(byte[] data) {
}
}

Пример

Слайд 11

Принцип открытости\закрытости Для того, чтобы одеть пальто, не нужно вскрывать грудную клетку O

Принцип открытости\закрытости

Для того, чтобы одеть пальто, не нужно вскрывать грудную клетку

O

Слайд 12

class TcpNetwork { byte[] receive() { } void send(byte[] data) { } } Пример

class TcpNetwork {
byte[] receive() {
}
void send(byte[] data) {

}
}

Пример

Слайд 13

class TcpNetwork { byte[] receive() { } void send(byte[] data) {

class TcpNetwork {
byte[] receive() {
}
void send(byte[] data) {

}
String receiveString() {
return new String(receive(), “UTF-8”);
}
void send(String data) {
send(data.getBytes(“UTF-8”));
}
}

Пример

Слайд 14

class StringTcpNetwork extends TcpNetwork { String receiveString() { return new String(receive(),

class StringTcpNetwork extends TcpNetwork {
String receiveString() {
return new String(receive(),

“UTF-8”);
}
void send(String data) {
send(data.getBytes(“UTF-8”));
}
}

Пример

Слайд 15

Принцип подстановки Лисков Если оно выглядит, как утка, квакает, как утка,

Принцип подстановки Лисков

Если оно выглядит, как утка, квакает, как утка, но

требует батарейки, возможно, у Вас проблема с абстракцией

L

Слайд 16

public class Fibonacci { int a = 0; int b =

public class Fibonacci {
int a = 0;
int b =

1;
int getNumber() {
int c = a + b;
a = b;
b = c;
return b;
}
}

Пример

Слайд 17

public class Main { public static vois main(String[] args) { Fibonacci

public class Main {
public static vois main(String[] args) {
Fibonacci

f = new Fibonacci();
for(int n = 1; n <= 50; n++) {
int m = f.getNumber();
System.out.println(m);
}
}
}

Пример

Слайд 18

public class Fibonacci implements Iterator { int a = 0; int

public class Fibonacci implements Iterator {
int a = 0;
int

b = 1;
int next() {
int c = a + b;
a = b;
b = c;
return b;
}
}

Пример

Слайд 19

public class Main { public static vois main(String[] args) { Fibonacci

public class Main {
public static vois main(String[] args) {
Fibonacci

f = new Fibonacci();
while(f.hasNext()) {
int m = f.next();
System.out.println(m);
}
}
}

Пример

Слайд 20

public class Fibonacci implements Iterator { /*...*/ int next() { /*...*/

public class Fibonacci implements Iterator {
/*...*/
int next() { /*...*/

}
boolean hasNext() { /*...*/ }
void setAmount(int n) { /*...*/ }
}

Пример

Слайд 21

public class Main { public static vois main(String[] args) { Fibonacci

public class Main {
public static vois main(String[] args) {
Fibonacci

f = new Fibonacci();
f.setAmount(50);
while(f.hasNext()) {
int m = f.next();
System.out.println(m);
}
}
}

Пример

Слайд 22

public class Fibonacci implements Iterator, Iterable { /*...*/ int next() {

public class Fibonacci implements Iterator,
Iterable {
/*...*/
int next() {

/*...*/ }
boolean hasNext() { /*...*/ }
void setAmount(int n) { /*...*/ }
Iterator iterator() {
return this;
}
}

Пример

Слайд 23

public class Main { public static vois main(String[] args) { Fibonacci

public class Main {
public static vois main(String[] args) {
Fibonacci

f = new Fibonacci();
f.setAmount(50);
for(int m : f) {
System.out.println(m);
}
}
}

Пример

Слайд 24

public class Fibonacci implements Iterator, Iterable { Fibonacci(int n) { /*...*/

public class Fibonacci implements Iterator,
Iterable {
Fibonacci(int n) { /*...*/

}
/*...*/
int next() { /*...*/ }
boolean hasNext() { /*...*/ }
Iterator iterator() {
return this;
}
}

Пример

Слайд 25

Принцип изоляции интерфейса Вы хотите чтобы я подключил это? Куда? I

Принцип изоляции интерфейса

Вы хотите чтобы я подключил это? Куда?

I

Слайд 26

public class Fibonacci implements Iterator { public boolean hasNext() { return

public class Fibonacci
implements Iterator {
public boolean hasNext() {
return

false;
}
public Integer next() {
return null;
}
public void remove() {
}
}

Пример

Слайд 27

interface Matrix { public int size(); public double get(int i, int

interface Matrix {
public int size();
public double get(int i, int

j);
public void set(int i, int j, double value);
}

Пример

Слайд 28

public class UsualMatrix implements Matrix { private double a[][]; public UsualMatrix(int

public class UsualMatrix implements Matrix {
private double a[][];
public UsualMatrix(int

size) {
a = new double[size][size];
}
public int size() {
return a.length;
}
public double get(int i, int j) {
return a[i][j];
}
public void set(int i, int j, double value) {
a[i][j] = value;
}
}

Пример

Слайд 29

public class SimmMatrix implements Matrix { private double a[][]; public SimmMatrix(int

public class SimmMatrix implements Matrix {
private double a[][];
public SimmMatrix(int

size) {
a = new double[size][];
for(int i = 0; i < size; i++) {
a[i] = new double[i+1];
}
}
public int size() {
return a.length;
}

Пример

Слайд 30

public double get(int i, int j) { if(i return a[i][j]; }

public double get(int i, int j) {
if(i < j)

{
return a[i][j];
} else {
return a[j][i];
}
}
public void set(int i, int j, double value) {
if(i < j) {
a[i][j] = value;
} else {
a[j][i] = value;
}
}
}

Пример

Слайд 31

public class EMatrix implements Matrix { private int size; public EMatrix(int

public class EMatrix implements Matrix {
private int size;
public EMatrix(int

size) {
this.size = size;
}
public int size() {
return size;
}
public double get(int i, int j) {
return i == j ? 1 : 0;
}
public void set(int i, int j, double value) {
}
}

Пример

Слайд 32

public class SummMatrix implements Matrix { private Matrix a, b; public

public class SummMatrix implements Matrix {
private Matrix a, b;
public

SummMatrix(Matrix a, Matrix b) {
this.a = a;
this.b = b;
}
public int size() {
return a.size;
}
public double get(int i, int j) {
return a.get(i, j) + b.get(i, j);
}
public void set(int i, int j, double value) {
}
}

Пример

Слайд 33

interface Matrix { public int size(); public double get(int i, int

interface Matrix {
public int size();
public double get(int i, int

j);
}
interface MutableMatrix extends Matrix {
public void set(int i, int j, double value);
}

Пример

Слайд 34

Принцип инверсии зависимостей Будете ли Вы подключать лампочку непосредственно к электропроводке в стене? D

Принцип инверсии зависимостей

Будете ли Вы подключать лампочку непосредственно к электропроводке в

стене?

D

Слайд 35

public class MyApplet extends JApplet { public paint(Graphics g) { /*...*/ } } Пример

public class MyApplet extends JApplet {
public paint(Graphics g) {
/*...*/

}
}

Пример

Слайд 36

public class MyMatrix { private int r[][]; private int g[][]; private

public class MyMatrix {
private int r[][];
private int g[][];
private

int b[][];
public MyMatrix(int w, int h) {
r = new int[h][w];
g = new int[h][w];
b = new int[h][w];
}
/*...*/
}

Пример

Слайд 37

public class Point { public int r, g, b; } public

public class Point {
public int r, g, b;
}
public class PictureMatrix

{
private Point p[][];
public PictureMatrix(int w, int h) {
p = new Point[h][w];
}
/*...*/
}

Пример

Слайд 38

public class Point { public int r, g, b; } interface

public class Point {
public int r, g, b;
}
interface PictureMatrix {

Point get(int i, int j);
int width();
int height();
}
public class PictureMatrixImpl1
implements PictureMatrix {
/*...*/
}
public class PictureMatrixImpl2
implements PictureMatrix {
/*...*/
}

Пример