You are on page 1of 29

LP TRNH HNG I TNG

Lp 12Tin - Nhm 3: Ng Minh Hng Nguyn Tun Hng

NI DUNG TRNH BY
Mt s ngn ng lp trnh hng i tng ph bin hin nay.
Gii thiu ngn ng lp trnh C++

4/17/2012

Lp trnh hng i tng

Phn I:
GII THIU V MT S NGN NG LP TRNH HNG I TNG PH BIN HIN NAY

4/17/2012

Lp trnh hng i tng

SO SNH MT S NGN NG LP TRNH HNG I TNG

4/17/2012

Lp trnh hng i tng

Bng so snh cc ngn ng thng dng trong lp trnh hng i tng [7]
Eiffel Smalltalk Ruby Java C# C++ Lai (Hybrid) / a m hnh (MultiParadigm) Python Perl Visual Basic H tr mt phn (Partial Suppor) Tnh hng i tng (Object Orientation) Loi h thng tnh (Static Typing) / ng (Dynamic Typing) LpGeneric Classes Thun tu (Pure) Thun tu (Pure) Thun tu (Pure) Lai ghp (Hybrid) Lai ghp (Hybrid) Lai ghp (Hybrid) Add-On / Lai ghp (Hybrid)

Static

Dynamic

Dynamic

Static

Static

Static

Dynamic

Dynamic

Static

Yes

N/A

N/A

No

No

Yes

N/A

N/A

No

Tnh k tha (Inheritance)

a tha k (Multiple)

n tha k (Single)

Single class, multiple "mixins"

Single class, multiple interfaces

Single class, multiple interfaces

Multiple

Multiple

Multiple

None

Feature Renaming Overloading

Yes No

No No

Yes No

No Yes

No Yes

No Yes

No No

No No

No No

4/17/2012

Lp trnh hng i tng

Bng so snh cc ngn ng thng dng trong lp trnh hng i tng


Eiffel Chng cht ton t (Operator Overloading) Smalltalk Ruby Java C# C++ Python Perl Visual Basic Yes Yes? Yes No Yes Yes Yes Yes No

Higher Order Functions


Lexical Closures Vic thu gom d liu v ngha (Garbage Collection) Truy (Uniform Access) cp

Agents (with version 5) Yes (inline agents) Mark and Sweep or Generation al

Blocks

Blocks Yes (blocks)

No

No

No

Lambda Expressions
Yes (since 2.1)

Yes

No

Yes (blocks) Mark and Sweep or Generation al

No Mark and Sweep or Generation al

No Mark and Sweep or Generation al

No

Yes

No

Mark and Sweep

None

Reference Counting

Reference Counting

Reference Counting

Yes

N/A

Yes

No

No

No

No

No

Yes

Class Variables / Methods 4/17/2012

No

Yes

Yes

Yes

Yes

Yes

No

No

No

Lp trnh hng i tng

Bng so snh cc ngn ng thng dng trong lp trnh hng i tng


Eiffel Reflection Yes (as of version 5) Smalltalk Yes Ruby Yes Java Yes C# Yes Public, Protected, Private, Internal, Protected internal. No C++ No Python Yes Perl Yes?

Visual Basic
No

Quyn truy cp (Access Control) Design by Contract

Selective Export.

Protected, Data, Public, Methods.

Public, Protected, Private.

Public, Protected, Package Private.

Public, Protected, Private "friends"

Name Mangling

None

Public, Private

Yes

No

Add-on

No

No

No

No

No

a tuyn on, a xu (Multithrea ding)

Implement ationDependent

Implement ationDependent

Yes

Yes

Yes

Libraries

Yes

No

No

4/17/2012

Lp trnh hng i tng

Bng so snh cc ngn ng thng dng trong lp trnh hng i tng


Eiffel Regular Expressions Pointer Arithmetic No Smalltalk No Ruby Built-in Java Standard Library C# Standard Library C++ No Python Standard Library Perl Built-in Visual Basic No

No

No

No

No

Yes

Yes

No

No

No

Ho hp vi nhng ngn ng khc (Language Integration)


Built-In Security Capers Language Level(*) Jones

C, C++, Java

C, C++, Java

C, some C++

All .NET Languages

C, Assembler

C, C++, Java

C, C++

C (via DCOM)

No

No?

Yes

Yes

Yes

No

No?

Yes (perlsec) 15

No

15

15

N/A

N/A

N/A

11

(*): ph thuc s dng lnh

4/17/2012

Lp trnh hng i tng

10

Bng so snh cc ngn ng thng dng trong lp trnh hng i tng


Eiffel Tnh ng gi (Encapsulation) / S che du d liu (Information Hiding) Tnh k tha (Inheritance) Tnh a hnh (Polymorphism) / Lin kt ng (Dynamic Binding) All pre-defined types are Objects All operations messages to Objects are Smalltalk Ruby Java C# C++ Python Perl Visual Basic

Yes

Yes

Yes

Yes

Yes

Yes

No

Yes?

Yes?

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes?

No Yes (through delegation) No No No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes?

Yes Yes Yes

Yes Yes Yes

Yes Yes Yes

No No Yes

No No Yes

No No No

Yes No Yes

No No No

All user-defined types are Objects

4/17/2012

Lp trnh hng i tng

11

PHN II: GII THIU NGN NG LP TRNH C++ BNG CC CHNG TRNH MU

4/17/2012

Lp trnh hng i tng

12

Mc tiu thit k C++


C++ c thit k l mt ngn ng tng qut c kiu tnh m li hu hiu v nng ng nh C C++ c thit k nhm h tr trc tip v y nhiu kiu lp trnh nh l lp trnh cu trc, s tru tng ca d liu, lp trnh hng i tng, v lp trnh tng qut. C++ c thit k ngi lp trnh c c hi la chn ngay c khi iu ny c th dn ti s chn la sai lm ca ngi lp trnh. C++ c thit k tng thch vi C cng nhiu cng tt, do , c cung ng mt s chuyn i (ngn ng) rt thun tin t C. C++ trnh cc chc nng m chng thuc v dc im ring ca nn tng hay ca mc ch chung chung. C++ khng l thuc vo cc phn b sung cho cc tnh nng tha C++ c thit k hot ng m khng cn phi c mi trng lp trnh hon thin.
4/17/2012 Lp trnh hng i tng 13

NHNG IM KHC BIT VI C



4/17/2012

Ch thch Cc kiu d liu Kim tra kiu, i kiu Cnh bo ca trnh bin dch Phm vi v khai bo Hng Qun l b nh Tham chiu
Lp trnh hng i tng 14

Kiu d liu (Data type)


Ngoi cc kiu d liu c s (basic data type) ca C, C++ cn b sung thm hai kiu c s l: bool kiu logic vi hai gi tr true v false. wchar_t kiu k t rng (wide characters) thng dng 16bit biu din k t thay v 8bit nh bng ASCII.
C++ cn cung cp thm mt kiu d liu derived data type l: Classes: mt cu trc (structure) c nng cao cung cp cc tnh nng hng i tng ca C++.
4/17/2012 Lp trnh hng i tng 15

Hng (Const)
Khai bo hng i vi:

Cc i tng m ta khng nh sa i const double PI = 3.14; const Date openDate(18,8,2003); Cc tham s ca hm m ta khng nh cho hm sa i void printHeight(const LargeObj &LO) { cout << LO.height; } Cc hm thnh vin khng thay i i tng ch int Date::getDay() const { return day; }
4/17/2012 Lp trnh hng i tng 16

Nhp xut d liu trong C++


Dng hm cin/cout nhp xut d liu ra mn hnh, hai hm ny c khai bo trong tp tin th vin iostream.h Hm cerr dng xut ra li. Hm cerr cng nm trong tp tin iostream.h

4/17/2012

Lp trnh hng i tng

17

Chng trnh mu s 1
// Hello world in C++
#include <iostream> using namespace std;

Kt qu v d: Enter a double: 1.2 Enter a positive integer: 3 i * x = 3.6

int main() { int i; double x; cout << "\nEnter a double: "; cin >> x; cout << "Enter a positive integer: "; cin >> i; while (i < 1){ cerr << "error i = " << i << endl; cout << "Enter a positive integer: "; cin >> i; }; cout << "i * x = " << i * x << endl; return 0; }
4/17/2012 Lp trnh hng i tng

18

Gii thch chng trnh mu s 1

// Hello world in C++ k t // l k t ghi ch trn 1 dng ca C++ #include <iostream> l khai bo th vin. Trong C++ khng cn khai bo ui .h using namespace std; trong mt s trnh bin dch C++, nhng tp tin tiu chun ca C++ c gi trong namespace std. Tuy nhin, c th khng cn cu lnh ny, nu khai bo th vin nh sau: #include <iostream.h> Hu ht cc chng trnh u cung cp khai bo th vin theo kiu c, c ui .h. Khi , khng cn cu lnh using namespace std; cout << "i * x = " << i * x << endl; endl l du hiu xung dng

4/17/2012

Lp trnh hng i tng

19

Tham chiu
Tham chiu (Reference) c th hiu l mt tn khc (alias) ca mt bin.
V d: #include <iostream> void main() { int x; int &y=x; x=3; cout << x << endl; cout << y << endl; cout << &x << endl; cout << &y << endl; } Kt qu in ra: 3 3 0x11ff2307 0x11ff2307

Ngha l y v x thc cht l mt. Ni cch khc y l tn khc ca x. Do , ta ni y l tham chiu ca x. Cu lnh: int &y=x; chnh l khi to gi tr ca y. Nh vy khi khai bo tham chiu bt buc phi khi to gi tr cho n. Trong trng hp ny ton t & c gi l ton t tham chiu, khng phi l ton t a ch.
4/17/2012 Lp trnh hng i tng 20

Truyn tham chiu cho hm


C++ cung cp mt khi nim mi: truyn tham s bng tham chiu. C++ s yu cu chng trnh dch gnh ly cng vic truyn tham s bng a ch. Do , vic truyn tham s s d dng v tin li hn rt nhiu so vi vic truyn tham s bng a ch nh trc.

4/17/2012

Lp trnh hng i tng

21

Chng trnh mu s 2
#include <iostream> using namespace std; void hoanvi(int &, int &); Kt qu v d: int main() { int a,b; a=20; b=30; cout<<Truoc hoan vi a=<<a<< b=<<b; hoanvi(a,b); cout<<Sau hoan vi a=<<a<< b=<<b; } void hoanvi(int &x, int &y) { int t = x; x = y; y = t; }
4/17/2012 Lp trnh hng i tng 22

Truoc hoan vi a=20 b=30 Sau hoan vi a=30 b=20

Overloading
ly gi tr tuyt i ca mt s thng thng s khai bo ba hm khc nhau tng ng vi ba kiu d liu khc nhau v mi khi s dng th phi kim tra kiu d liu ngi dng nhp vo quyt nh s dng hm no cho ph hp. Nu s dng function overloading th ch c mt tn hm duy nht chung cho c ba kiu d liu. Khi hm c gi n, khng cn quan tm ci no s c thc hin v chng trnh s tm hiu tham s truyn cho hm l loi no gi (chn ra) phng n thc hin ng.
4/17/2012 Lp trnh hng i tng 23

Overloading
int abs(int i); long labs(long l); double fabs(double d); int abs(int i); long abs(long l); double abs(double d);

int abs(int i) { return abs(i);} long abs(long l) { return labs(l);} double abs(double d) { return fabs(d);} void test_abs() { int i = abs(10); long l = abs(-10l); double = abs(0.1l); }
4/17/2012

// abs(int ) // abs(long ) // abs(double )

Lp trnh hng i tng

24

Chng trnh mu s 3
#include <iostream> using namespace std; int abs(int); long abs(long); double abs(double); int main() { int a=-100; long b=-100000; double c=-100.15; cout<<abs(a)=<<abs(a)<<endl; cout<<abs(a)=<<abs(a)<<endl; cout<<abs(a)=<<abs(a)<<endl; return 0; } int abs(int i) { return abs(i);} long abs(long l) { return labs(l);} double abs(double d) { return fabs(d);}
4/17/2012 Lp trnh hng i tng 25

Kt qu v d: abs(a)=100 abs(b)=100000 abs(c)=100.15

Tham s ngm nh trong li gi hm


Hm s t ng gn gi tr ngm nh cho mt tham s trong trng hp trong li gi hm khng c tham s . Cc gi tr ngm nh phi t cui danh sch tham s, trnh nhm ln cc gi tr Cc gi tr ngm nh ca tham s ch c khai bo trong khun mu hm

4/17/2012

Lp trnh hng i tng

26

Chng trnh mu s 4
#include <iostream> using namespace std; void inc(int &, int) Kt qu v d: int main() {int x = 5, y = 10; inc(x, 10); inc(y); } void inc(int &a, int b = 1) { a = a + b; } x=15 y=11

// x = x + 10 // y = y + 1

4/17/2012

Lp trnh hng i tng

27

Ton t qun l b nh ng
Ton t cp pht b nh ng new int *x; x = new int; // x = (int*)malloc(sizeof(int)); char *y; y = new char[100]; // y = (char*)malloc(100); Ton t gii phng b nh ng delete delete x; // free(x); delete y; // free(y);
4/17/2012 Lp trnh hng i tng 28

Tham kho t internet


[1] http://en.wikipedia.org/wiki/Smalltalk

[2] http://en.wikipedia.org/wiki/C%2B%2B
[3] http://en.wikipedia.org/wiki/Java_(programming_language) [4] http://en.wikipedia.org/wiki/PHP [5] http://en.wikipedia.org/wiki/Python_(programming_language) [6] http://en.wikipedia.org/wiki/Ruby_(programming_language) [7] http://www.jvoegele.com/software/langcomp.html

4/17/2012

Lp trnh hng i tng

29

Ti liu tham kho


C++ v lp trnh hng i tng GS. Phm Vn t Lp trnh hng i tng vi Java PGS. TS. Trn nh Qu A Complete Guide to Programming in C++ Ulla Kirch-Prinz, Peter Prinz C++ by Dissection Ira Pohl, University of California C++: The Complete Reference Third Edition, Herb Schildt

4/17/2012

Lp trnh hng i tng

30

CM N THY V CC BN CH THEO DI

You might also like