Click to edit Master subtitle style CHƯƠNG 1:
GIỚI THIỆU LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM
1
NỘI DUNG
• Một số Mô thức lập trình
• Khái niệm Lớp và Đối tượng
• Ba nguyên tắc lập trình hướng đối tượng
• Một số phần mềm được viết theo hướng
đối tượng
2
Tại sao OOP?
• Object Oriented Programming (OOP) là
mô thức quan trọng – Tất cả ngôn ngữ hiện đại điều object oriented
hay hỗ trợ object và class
– Các framework, library, API hiện đại đều object
oriented
•
.NET Framework Class Library (C#), Java API classes (Java),
• Laravel (PHP), Rails (Ruby), • STL (C++), Django (Python), Android, …
• Bất kỳ ai bắt đầu công việc phát triển phần
3
mềm nên làm quen với OOP và OO
modeling
Một số mô thức lập trình
4
Mô thức lập trình
• Programming paradigm: Mô thức/Mô hình
lập trình – Cách chúng ta “nhìn” về việc xây dựng các
chương trình máy tính
• Một số programming paradigm:
– Imperative – Structured – Procedural – Object oriented – Functional – Declarative
– …
5
Imperative programming
• Mô thức “Lập trình Tuần tự” với ý tưởng
chủ đạo là lệnh (commands)
Input data Process Output data
• Chương trình là chuỗi các lệnh (cụ thể/rõ ràng (explicit)) có thứ tự (step by step) dùng để thay đổi trạng thái chương trình
6
Ví dụ
DATA SEGMENT A DB 1,2,3,4,5,6,7,8,9,10 DATA ENDS CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA MOV DS,AX MOV CL,10 LEA BX,A MOV AH,00 MOV AL,00
L1:
ADD AL,BYTE PTR[BX] INC BX DEC CL CMP CL,00 JNZ L1 MOV AH,4CH INT 21
END START CODE ENDS
7
Imperative programming
• Đặc điểm:
– Các biến toàn cục – Mỗi bước ảnh hưởng đến trạng thái toàn cục
của chương trình
– Có lệnh goto để nhảy đến lệnh khác – Có những đoạn mã được viết nhiều lần
• Ngôn ngữ: Assembly, Pascal, C, …
8
Structured programming
• Mô thức “Lập trình Cấu trúc” là dạng
Imperative programming, nhưng Chương trình có tổ chức, cấu trúc logic hơn:
result = []; for i = 0; i < length(people); i++ { p = people[i]; if length(p.name)) > 5 { addToList(result, toUpper(p.name)); } } return sort(result);
9
Structured programming
• Đặc điểm:
– Lệnh tuần tự (Sequence), Lệnh lặp (Loop),
Lệnh điều kiện (Condition)
– Phong cách lập trình Thục đầu dòng
(indentation)
– Loại bỏ/hạn chế lệnh goto
• Ngôn ngữ: Pascal, C, …
• Khuyết điểm:
– Khó phân công cho nhiều người cùng viết – Dữ liệu được “thả tự do”
– Có những đoạn mã viết nhiều lần
10
Procedural programming
chương
trình
• Mô thức “Lập trình Thủ tục” kế thừa structured programming và đưa thêm ý con tưởng (procedure/function) chứa các đoạn mã thường sử dụng
• Chương trình máy tính có thể chia thành các chương trình con (procedure) và các chương trình con gọi nhau để giải quyết bài toán
11
Ví dụ
int result = 1; for (int i = 2; i <= n; i++)
public static int Factorial(int n) { result = result * i;
return result;
}
int fact; fact = Factorial(5);
static void Main(string[] args) { Console.WriteLine("5! = " + fact);
int n = 10; int m = 5; fact = Factorial(n) + Factorial(m); Console.WriteLine("n! + m! = " + fact); }
12
Procedural programming
• Đặc điểm
– Tập trung vào “action” của chương trình, không
phải data
– Phương pháp top-down, làm mịn dần:
Chia chương trình lớn thành các chương trình con, …
– Biến toàn cục (global variable) và Biến cục bộ
(local variable)
• Ngôn ngữ: Pascal, C, …
• Khuyết điểm:
– Mối quan hệ giữa dữ liệu và hàm không được
13
quan tâm, quản lý
Object oriented programming
• Mô thức “Lập trình Hướng đối tượng” cải biên procedure programming bằng cách đưa vào ý tưởng object (đối tượng)
Đối tượng = Dữ liệu + Hàm thao tác trên Dữ liệu • Chương trình máy tính gồm các objects, các objects giao tiếp với nhau để giải quyết bài toán đặt ra
14
Ví dụ
class Student { string code; string name; int yearOfBirth;
code = studentCode; name = studentName; yearOfBirth = year;
public Student(string studentCode, string studentName, int year) { }
return DateTime.Now.Year - yearOfBirth;
public int GetYearOld() { } }
15
Ví dụ
class InformaticsClass { Student[] students; string className;
public void Input() { }
class Program { static void Main(string[] args) { InformaticsClass a = new InformaticsClass();
public int NumStudents() { if (students == null) return 0;
a.Input(); Console.WriteLine("No. " + a.NumStudents()); } }
return students.Length; } }
16
Object Oriented Programming
• Đặc điểm:
– Tập trung xung quanh khái niệm object (tập
trung vào dữ liệu và những gì làm với dữ liệu đó) • Tập trung cả Dữ liệu và Hàm • Tổ chức code theo cách (mô phỏng) hoạt động của
thế giới thực
• Mô hình hóa các đối tượng trong thế giới thực vào
máy tính
– Hỗ trợ Các nguyên tắc:
• Đóng gói (encapsulation) • Thừa kế (inheritance) • Đa hình (polymorphism), …
17
Object Oriented Programming
• Ưu điểm:
– Quản lý mối quan hệ giữa Dữ liệu và Hàm
(trong object)
– Tổ chức code hiệu quả theo cách thức tổ chức
trong tự nhiên
– Giúp mô hình hóa các đối tượng trong thế giới
thực trên máy tính
• Ngôn ngữ: C++, Java, C#, …
18
Khái niệm Lớp và Đối tượng
19
Đối tượng (object)
• Trong thế giới thực có nhiều đối tượng:
20
Đối tượng (object)
• Hoạt động thường ngày:
– Sáng ra khỏi gường, dùng bàn chảy đánh
răng,
– ăn sáng và uống cafe, – đến công ty làm việc, – đến nhà hàng ăn trưa, giải lao, – rồi quay về công ty làm viêc, … – tối vào bếp nấu ăn, xem ti vi/đọc sách, lên
gường ngủ.
• Life là quá trình tương tác giữa các đối
21
tượng với nhau
• Ý tưởng: Tiến trình viết phần mềm là quá
trình mô hình hóa từ thực tế vào máy tính
Đối tượng (object)
• Trong thế giới thực, đối tượng (object)
thường có – Một số thuộc tính cấu tạo nên đối tượng – Một số hành vi
-
Attributes: ID - Name - YearOfBirth - … Attributes: - Title - Author - Pages - …
Behaviours: - GetAge - SetName - … Behaviours: - CountWords - BookMark - SetTitle - …
22
Đối tượng (object)
• OOP là phương pháp chuyển các vấn đề thế giới thực (đối tượng thực) sang các mô hình (đối tượng trên máy tính) có thể giải quyết trên máy tính
• Trong OOP, Đối tượng (object): Bất kỳ thứ
gì có thể được mô hình thành: – Dữ liệu (data/field/property/attribute/state) – Hàm (function/method/behaviour/operation)
thao tác trên dữ liệu
• Trong OOP, Đối tượng (object) là biến có
23
Tập dữ liệu và Hàm
Đối tượng (object) – ví dụ
• Real world object: Car
– Properties: color, make, model, year, …
• Velocity
– Methods:
• Accelerator (chân ga) • Brake (thắng) • Speedmotor (đồng hồ tốc độ)
24
Lớp (class)
• Lớp (class): Nhiều đối tượng cụ thể “giống nhau” được nhóm thành một loại/loài hay lớp (class)
• Lớp (class) là mẫu (template) hay bản thiết
kế (blueprint) để tạo đối tượng
25
Lớp (class) – ví dụ
26
Lớp (class)
• Trong OOP, Lớp (class) dùng để định nghĩa/tạo ra kiểu mới, từ đó tạo ra đối tượng, lớp có
– Dữ liệu (data/field/property/attribute/state),
dùng biến lưu trữ
– Các hàm (function/method/behaviour) thao
tác trên dữ liệu
27
Lớp và Đối tượng
• VD: Để tạo Car, Lấy Car class, dựa trên đó
tạo Car
object
object
Class
object
28
Lớp và Đối tượng
class Program {
class Car { int velocity; public Accelerator() { }
staitc void Main () { Car a = new Car(); Car b = new Car(); Car c = new Car();
} }
public int Speedmotor() { } }
29
3 nguyên tắc lập trình hướng đối tượng
30
3 nguyên tắc lập trình hướng đối tượng
• Đóng gói (Encapsulation) và Giao diện
(Interface) – Ẩn chi tiết của lớp (Đóng gói), chỉ cung cấp các
phương thức cần thiết để dùng (Giao diện)
• Thừa kế (Inheritance)
– Tạo lớp mới thừa kế lớp đã có
• Đa hình (Polymorphism)
– Khả năng tạo ra các lớp dẫn xuất, cài đặt cùng một method của lớp cơ sở theo những cách khác nhau (tùy từng lớp dẫn xuất)
31
Encapsulation và Interface
• Đóng gói (Encapsulation)
– Ẩn chi tiết công việc thực thi của lớp – Trong OOP, Đóng gói là
• Ẩn đi các property • Ẩn đi một số method • Ẩn đi các chi tiết hiện thực của method
• Giao diện (Interface)
– Bản điều khiển cho phép dùng đối tượng – Trong OOP, Giao diện là tập các method cho
phép dùng object
32
Encapsulation và Interface
33
Thừa kế (inheritance)
• Thừa kế (inheritance)
lớp đã có thành một lớp cụ thể
– Tạo lớp mới thừa kế lớp đã có – Một cách tái sử dụng các lớp bằng cách mở rộng
– “Lớp đã có”: base class, superclass, parent class – “Lớp mới”: derived class, subclass, child class
34
Thừa kế (inheritance)
35
Thừa kế (inheritance)
36
Thừa kế (inheritance)
37
Thừa kế (inheritance)
• Thừa kế: Lớp con thừa kế – Các dữ liệu của lớp cha – Các hàm của lớp cha
• Ngoài ra, lớp con còn
– Có những dữ liệu riêng của lớp con – Có những hàm riêng của lớp con
38
Đa hình (polymorphism)
• Đa hình (polymorphism)
– Poly = many – Morphism = forms
– Các lớp con cài đặt cùng một hàm của lớp
cha, nhưng mỗi lớp con có cách cài đặt khác nhau
39
Đa hình (polymorphism)
40
MỘT SỐ PHẦN MỀM VIẾT THEO OOP
• Photoshop • Adobe Acrobat • NotePad++ • VLC (VideoLan) • Camtasia Studio • Paint.NET • Visual Studio • Microsoft Office (Word, Excel, …) • SQL Server • Sky client
41
ĐIỂM CHÍNH
• Tại sao học OOP? • OOP là gì? • Object và Class
• 3 nguyên tắc cơ bản của lập trình hướng
đối tượng – Đóng gói (Encapsulation) – Thừa kế (Inheritance) – Đa hình (Polymorphism)
42

