Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

2004, HONG MINH SN

Chng 1

K thut lp trnh
Phn III: Lp trnh hng i tng
Chng 5: Lp v i tng

0101010101010101100001
0101010101010101100001
StateController
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
start()
1100101100100010000010
1100101100100010000010
stop()
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
1010011000110010010010
1010011000110010010010
y = A*x + B*u;
1100101100100010000010
1100101100100010000010
x = C*x + d*u;
LQGController
0101010101010101100001
0101010101010101100001
0101010100101010100101
0101010100101010100101
start()
1010011000110010010010
stop()
1010011000110010010010
1100101100100010000010
1100101100100010000010
9/15/2006

Ni dung chng 5

2004, HONG MINH SN

5.1
5.2
5.3
5.4
5.5

Khi nim
T cu trc sang lp
Bin thnh vin
Hm thnh vin
Kim sot truy nhp

Chng 5: Lp v i tng

2005 - HMS

5.1 Khi nim


i tng l g?
Thc th phn mm
M hnh/i din ca mt i tng vt l:

Tank, Heater, Furnace


Motor, Pump, Valve
Sensor, Thermometer, Flowmeter
Control Loop, Control System

2004, HONG MINH SN

Hoc mt i tng logic ("conceptual object):


Trend, Report, Button, Window
Matrix, Vector, Polynomial

Chng 5: Lp v i tng

2005 - HMS

Mt i tng c...
Hnh vi

sa, cn, chy


chy khi gp nguy him

Cc thuc tnh (attributes)


Trng thi (state)
D liu
Quan h

2004, HONG MINH SN

Hnh vi (behavior)
Cc php ton
c tnh phn ng
Cn cc (identity)
Ng ngha/trch nhim
(semantic/responsibilities)

Chng 5: Lp v i tng

Trng thi

t th
sc khe
Thuc tnh
Cn cc

Tn: Rex
ID: 007

mu lng: vng
ging: Berge

Ng ngha

Ch gi nh
2005 - HMS

Lp l g?
Mt lp l thc thi ca cc i tng c chung

Ng ngha
Thuc tnh
Quan h
Hnh vi

Lp = ng gi [Cu trc d liu + hm thao tc]


Lp cc vector, lp cc ma trn (d liu phn t + cc php truy
nhp v php ton c bn)
Lp cc hnh ch nht (cc d liu ta + php v, xa,...)
Lp cc m hnh hm truyn (cc h s a thc t/mu, cc php
ton xc nh tnh n nh, xc nh cc im cc,...)
2004, HONG MINH SN

Cc d liu ca mt lp => bin thnh vin

Cc hm ca mt lp => hm thnh vin

Cc bin ca mt lp => mt i tng, mt th nghim

Chng 5: Lp v i tng

2005 - HMS

Lp trnh hng i tng


(object-oriented programming, OOP)
Tru tng ha (abstraction): gip n gin ha vn , d s
dng li
ng gi d liu/che du thng tin (data encapsulation/
information hiding): nng cao gi tr s dng li v tin cy
ca phn mm
Dn xut/tha k (subtyping/inheritance): gip d s dng li
m phn mm v thit k

2004, HONG MINH SN

a hnh/a x (polymorphism): gip phn nh trung thc th


gii thc v nng cao tnh linh hot ca phn mm

Phng php lun hng i tng cho php t duy mc


tru tng cao nhng gn vi th gii thc!

Chng 5: Lp v i tng

2005 - HMS

5.2 T cu trc sang lp

2004, HONG MINH SN

struct Time {
int hour; // gio
int min; // phut
int sec; // giay
};
void addHour(Time& t, int h) {
t.hour += h;
}
void addMin(Time& t, int m) {
t.min += m;
if (t.min > 59) {
t.hour += t.min/60;
t.min %= 60;
}
else if (t.min < 0) {
t.hour += (t.min/60 - 1);
t.min = (t.min % 60) + 60;
}
}

Chng 5: Lp v i tng

void addSec(Time& t, int s) {


t.sec += s;
if (t.sec > 59) {
addMin(t, t.sec/60);
t.sec %= 60;
}
else if (t.sec < 0) {
addMin(t, t.sec/60 - 1);
t.sec = (t.sec % 60) + 60;
}
}
void main() {
Time t = {1, 0, 0};
addMin(t,60);
addMin(t,-5);
addSec(t,25);
...
}
2005 - HMS

Mt s vn ca cu trc
Truy nhp d liu trc tip, khng c kim sot c th dn n
khng an ton
Time t1 = {1, 61, -3};
Time t2;
int h = t2.hour;
int m = 50;
t2.min = m + 15;

// ??!
// Uncertain values
// ??!
// ??!

Khng phn bit gia chi tit bn trong v giao din bn


ngoi, mt thay i nh chi tit bn trong cng bt ngi s
dng phi thay i m s dng theo!

2004, HONG MINH SN

V d: cu trc Time c sa li tn bin thnh vin:


struct Time {
int h, m, s;
};

on m c s khng bin dch c:


Time t;
t.hour = 5;

Chng 5: Lp v i tng

2005 - HMS

ng gi hay "lp ha"


class Time {
int hour; // gio
int min; // phut
int sec; // giay
public:
Time() {hour=min=sec=0;}

Bin thnh vin


(member variable)
Hm to (constructor)

2004, HONG MINH SN

void setTime(int h, int m, int s)


{
hour = h;
min = sec = 0;
addSec(s);
addMin(m);
}
int getHour() { return hour; }
int getMin() { return min; }
int getSec() { return sec; }

Hm thnh vin
(member functions)

void addHour(int h) { hour += h; }


...

Chng 5: Lp v i tng

2005 - HMS

2004, HONG MINH SN

void addMin(int m) {
min += m;
if (min > 59) {
hour += min/60;
min %= 60;
}
else if (min < 0) {
hour += (min/60 - 1);
min = (min % 60) + 60;
}
}
void addSec(int s) {
sec += s;
if (sec > 59) {
addMin(sec/60);
sec %= 60;
}
else if (sec < 0) {
addMin(sec/60 - 1);
sec = (sec % 60) + 60;
}
}

void main()
{
Time t;
t.addHour(1);
t.addMin(60);
t.addMin(-5);
t.addSec(25);
t.hour = 1; // error
t.min = 65; // error
t.sec = -3; // error
t.setTime(1, 65, -3);
int h = t.getHour();
int m = t.getMin();
int s = t.getSec();
}

};
Chng 5: Lp v i tng

2005 - HMS

10

5.3 Bin thnh vin


Khai bo bin thnh vin ca mt lp tng t nh cu trc
class Time {
int hour, min, sec;
...
};

Mc nh, cc bin thnh vin ca mt lp khng truy nhp


c t bn ngoi (bin ring), ng nhin cng khng khi
to c theo cch c in:
Time t = {1, 0, 0};
t.hour = 2;

// error!
// error!

2004, HONG MINH SN

C th lm cho mt bin thnh vin truy nhp c t bn


ngoi (bin cng cng), tuy nhin t khi c l do cn lm nh th:
class Point {
public:
int x,y;
};

Chng 5: Lp v i tng

2005 - HMS

11

Kim sot vic truy nhp cc bin ring thng qua cc hm


thnh vin
Cch duy nht khi to gi tr cho cc bin thnh vin l s
dng hm to:
class Time {
...
public:
Time() {hour=min=sec=0;}
};
Time t;
// t.hour = t.min = t.sec = 0;

2004, HONG MINH SN

Mt s bin thnh vin c vai tr lu tr trng thi bn trong


ca i tng, khng nn cho truy nhp t bn ngoi (ngay c
gin tip qua cc hm)
class PID {
double Kp, Ti, Td;
double I;
...

// controller parameters
// internal state

};

Chng 5: Lp v i tng

2005 - HMS

12

5.4 Hm thnh vin


nh ngha lp

struct Time {
int hour, min, sec
};
void addHour(Time& t, int h) {
t.hour += h;
}
...

class Time {
int hour,min,sec;
public:
void addHour(int h) {
hour += h;
}
...
};

Gi hm vi bin cu trc

Gi hm thnh vin ca T

Time t;
...
addHour(t,5);

Time t;
...
t.addHour(5);

2004, HONG MINH SN

nh ngha cu trc & hm

y c s khc nhau v cch vit,


nhng cha c s khc nhau c bn

Chng 5: Lp v i tng

2005 - HMS

13

Khai bo v nh ngha hm thnh vin


Thng thng, lp cng cc hm thnh vin c khai bo
trong tp tin u (*.h). V d trong tp c tn mytime.h:
class Time {
int hour,min,sec;
public:
void addHour(int h);
void addMin(int m);
void addSec(int s);
...
};
2004, HONG MINH SN

Cc hm thng c nh ngha trong tp tin ngun (*.cpp):


#include mytime.h
...
void Time::addHour(int h) {
hour += h;
}

Chng 5: Lp v i tng

2005 - HMS

14

C th nh ngha mt hm thnh vin trong tp tin u di dng


mt hm inline (ch nn p dng vi hm n gin), v d:
inline void Time::addHour(int h) { hour += h;}

Mt hm thnh vin cng c th c nh ngha trong phn khai


bo lp => mc nh tr thnh hm inline, v d
class Time {
int hour,min,sec;
public:
void addHour(int h) { hour += h; }
};

2004, HONG MINH SN

Khi nh ngha hm thnh vin, c th s dng cc bin thnh


vin v gi hm thnh vin khc m khng cn (thm ch khng
th c) a tn bin i tng, v d:
void Time::addSec(int s) {
...
addMin(sec/60);
...
}

Chng 5: Lp v i tng

2005 - HMS

15

Bn cht ca hm thnh vin?


class Time {
int hour,min,sec;
public:
Time() { hour=min=sec=0; }
void addHour(int h) {
this->hour += h;// con tr this chnh l a ch ca
}
// i tng gi hm thnh vin
...
};

2004, HONG MINH SN

void main() {
Time t1,t2;
t1.addHour(5);
t2 = t1;
t2.addHour(5);
...
}

Chng 5: Lp v i tng

//
//
//
//

T ng gi hm to Time() cho t1 v t2
C th hiu nh l addHour(&t1,5);
OK
C th hiu nh l addHour(&t2,5);

2005 - HMS

16

5.5 Kim sot truy nhp


public: Cc thnh vin cng cng, c th s dng c t bn
ngoi
private: Cc thnh vin ring, khng th truy nhp c t bn
ngoi, ngay c trong lp dn xut (s cp sau)
class Time {
private:
int hour,min,sec;
...
};
2004, HONG MINH SN

Mc nh, khi khai bo class th cc thnh vin l private.


protected: Cc thnh vin c bo v, khng th truy nhp
c t bn ngoi, nhng truy nhp c cc lp dn xut (s
cp sau)

Chng 5: Lp v i tng

2005 - HMS

17

5.6 Con tr i tng

2004, HONG MINH SN

#include "mytime.h"
void main() {
Time t;
//
t.addHour(5);
Time *pt = &t;
//
pt->addSec(70);
pt = new Time;
//
pt->addMin(25);
...
delete pt;
pt = new Time[5]; //
for (int i=0; i < 5;
pt[i].addSec(10);
...
delete [] pt;
}

Chng 5: Lp v i tng

call constructor Time()


pt is identical to this pointer
call constructor Time()

call constructor 5 times


++ i)

2005 - HMS

18

Bi tp v nh

Da trn cu trc Vector v cc hm lin quan thc hin


trong chng 4, hy xy dng lp i tng Vector vi cc hm
thnh vin cn thit.

Khai bo mt lp thc hin lu tr thng tin ca mt lp sinh


vin gm nhng thnh phn thuc tnh nh sau:
S hiu sinh vin : Kiu s nguyn
H v tn: Chui k t
Nm sinh: Kiu s nguyn

2004, HONG MINH SN

Khai bo v nh ngha m rng lp qun l sinh vin bng cc


hm thnh vin thc hin cc chc nng nh sau:

Nhp h tn sinh vin


Nhp s hiu sinh vin
Nhp nm sinh
Tm v hin th thng tin sinh vin khi bit m s

Chng 5: Lp v i tng

2005 - HMS

19

You might also like