Similar presentations:
Принципы объектно-ориентированного проектирования
1. Принципы объектно-ориентированного проектирования
Принципы объектноориентированногопроектирования
2.
POP3POSIX
Assembler
HTTP
C/C++
CSS
SQL
XML
SMTP
Java
WinAPI
ActionScript
PHP
VCL
JavaScript
FTP
VBA
HTML
3.
POP3POSIX
Assembler
HTTP
C/C++
CSS
SQL
XML
SMTP
Java
WinAPI
ActionScript
PHP
VCL
JavaScript
FTP
VBA
HTML
4.
императивноепрограммирование
объектно-ориентированное
программирование
структурное
программирование
функциональное
программирование
процедурное
программирование
5.
императивноепрограммирование
объектно-ориентированное
программирование
структурное
программирование
функциональное
программирование
процедурное
программирование
6. Принципы объектно-ориентированного программирования
Принципы объектноориентированногопрограммирования
Принцип единственной ответственности
Принцип открытости / закрытости
Принцип подстановки Лисков
Принцип изоляции интерфейса
Принцип инверсии зависимостей
7. Принцип единственной ответственности
Только потому, что Вы можете, еще не значит, что вы должны это сделать8. Пример
class Network {byte[] receiveByTcp() {
}
byte[] receiveByUdp() {
}
void sendByTcp(byte[] data) {
}
void sendByUdp(byte[] data) {
}
}
9. Пример
class TcpNetwork {byte[] receive() {
}
void send(byte[] data) {
}
}
class UdpNetwork {
byte[] receive() {
}
void send(byte[] data) {
}
}
10.
Примерclass TcpNetworkReceiver {
byte[] receive() {
}
}
class TcpNetworkSender {
void send(byte[] data) {
}
}
class UdpNetworkReceiver {
byte[] receive() {
}
}
class UdpNetworkSender {
void send(byte[] data) {
}
}
11. Принцип открытости\закрытости
Для того, чтобы одеть пальто, не нужно вскрыватьгрудную клетку
12.
Примерclass TcpNetwork {
byte[] receive() {
}
void send(byte[] data) {
}
}
13.
Пример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(), “UTF-8”);
}
void send(String data) {
send(data.getBytes(“UTF-8”));
}
}
15. Принцип подстановки Лисков
Если оно выглядит, как утка, квакает, как утка, но требуетбатарейки, возможно, у Вас проблема с абстракцией
16.
Пример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 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 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 f = new Fibonacci();
while(f.hasNext()) {
int m = f.next();
System.out.println(m);
}
}
}
20.
Примерpublic class Fibonacci implements Iterator {
/*...*/
int next() { /*...*/ }
boolean hasNext() { /*...*/ }
void setAmount(int n) { /*...*/ }
}
21.
Пример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() { /*...*/ }
boolean hasNext() { /*...*/ }
void setAmount(int n) { /*...*/ }
Iterator iterator() {
return this;
}
}
23.
Пример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) { /*...*/ }
/*...*/
int next() { /*...*/ }
boolean hasNext() { /*...*/ }
Iterator iterator() {
return this;
}
}
25. Принцип изоляции интерфейса
Вы хотите чтобы я подключил это? Куда?26.
Примерpublic class Fibonacci
implements Iterator<Integer> {
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 j);
public void set(int i, int j, double value);
}
28.
Пример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 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 < 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 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 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 j);
}
interface MutableMatrix extends Matrix {
public void set(int i, int j, double value);
}
34. Принцип инверсии зависимостей
Будете ли Вы подключать лампочку непосредственно кэлектропроводке в стене?
35.
Примерpublic class MyApplet extends JApplet {
public paint(Graphics g) {
/*...*/
}
}
36.
Пример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 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 PictureMatrix {
Point get(int i, int j);
int width();
int height();
}
public class PictureMatrixImpl1
implements PictureMatrix {
/*...*/
}
public class PictureMatrixImpl2
implements PictureMatrix {
/*...*/
}
39.
Примерpublic class MyApplet extends JApplet {
private PictureMatrix pm = null;
public void paint(Graphics g) {
for(int i = 0; i < pm.height(); i++) {
for(int j = 0; j < pm.height(); j++) {
out(pm.get(i, j).r,
pm.get(i, j).g,
pm.get(i, j).b);
}
}
}
public void init() {
pm = new PictureMatrixImpl1();
}
}