IS216 - LẬP TRÌNH JAVA Chương 2 LẬP TRÌNH HĐT OOP Nội dung 1. Lớp và đối tượng 3. Đặc điểm hướng đối tượng trong Java 2 GIỚI THIỆU 3 Lập trình hướng đối tượng LÀ GÌ ? 4 Giới thiệu ● Object-Oriented Programming (OOP) ● Lập trình hướng đối tượng là phương pháp (bao gồm cả thiết kế và phát triển) lập trình dựa trên kiến trúc lớp (class) và đối tượng (object) 5 Giới thiệu ● Đặc điểm: ● Chương trình được chia thành các đối tượng. ● Các cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng.
● Các hàm thao tác trên các vùng dữ liệu của đối tượng được gắn với cấu trúc dữ liệu đó. ● Dữ liệu được đóng gói lại, được che giấu và không cho phép các hàm ngoại lai truy nhập tự do. ● Các đối tượng tác động và trao đổi thông tin với nhau qua các hàm ● Có thể dễ dàng bổ sung dữ liệu và các hàm mới vào đối tượng nào đó khi cần thiết ● Chương trình được thiết kế theo cách tiếp cận từ dưới lên (bottom-up) 6 Giới thiệu ● Phương pháp giải quyết ‘top-down’ (từ trên xuống) cũng còn được gọi là ‘lập trình hướng cấu trúc’ (structured programming). Nó xác định những chức năng chính của một chương trình và những chức năng này được phân thành những đơn vị nhỏ hơn cho đến mức độ thấp nhất.
● Phương pháp OOP cố gắng quản lý việc thừa kế phức tạp trong những vấn đề đời thực. Để làm được việc này, phương thức OOP che giấu một vài thông tin bên trong các đối tượng. OOP tập trung trước hết trên dữ liệu. Rồi gắn kết các phương thức thao tác trên dữ liệu, việc này được xem như là phần thừa kế của việc định nghĩa dữ liệu.
7 Giới thiệu Phương pháp Top-Down OOP Chúng ta sẽ xây dựng một tòa nhà 10 tầng với những Chúng ta sẽ xây dựng một dãy có các phòng trung khách sạn. bình, có các phòng sang trọng, và một phòng họp lớn. Chúng ta sẽ thiết kế các Chúng ta sẽ xây dựng một tầng lầu, các phòng và khách sạn với những thành phòng họp. 8 Giới thiệu ● 4 basic pillars (nguyên tắc trụ cột) of OOP ● Abstraction: Trừu tượng hóa ● Encapsulation: Đóng gói ● Inheritance: Kế thừa ● Polymorphism: Đa hình 9 Giới thiệu 10 Các khái niệm cơ bản ➢Lớp (class): Là khuôn mẫu (template), là bản mô tả những tính chất và hành vi chung của những sự vật, hiện tượng tồn tại trong thực tế.
Ví dụ: các lớp: Con người, Sinh viên, Lớp học, Môn học, Phòng học…. ➢Lớp là cách phân loại (classify) các đối tượng dựa trên đặc điểm chung của các đối tượng đó. 11 Các khái niệm cơ bản ➢Đối tượng (object): trong thế giới thực khái niệm đối tượng có thể xem như một thực thể: người, vật, bảng dữ liệu,… Đối tượng trong thế giới thực: là một thực thể cụ thể mà ta có thể sờ, nhìn thấy hay cảm nhận được. ○ Đối tượng giúp hiểu rõ thế giới thực ○ Cơ sở cho việc cài đặt trên máy tính ○ Mỗi đối tượng có định danh, thuộc tính, hành vi ○ Ví dụ: đối tượng sinh viên MSSV: “TH0701001”; Tên sinh viên: “Nguyễn Văn A” 12 Các khái niệm cơ bản ➢Đối tượng (object) của lớp: một đối tượng cụ thể thuộc 1 lớp là 1 thể hiện cụ thể của 1 lớp đó.
Một lớp có thể có nhiều thể hiện cụ thể (nhiều đối tượng) Ví dụ: Sinh viên A, Sinh viên B là đối tượng của lớp Sinh viên. ➢Quan hệ giữa Class và Object là quan hệ giữa mô tả (khuôn mẫu) và sự vật, hiện tượng cụ thể được sinh ra từ mô tả đó. 13 Các khái niệm cơ bản ➢Lớp (class): là khuôn mẫu (template) để sinh ra đối tượng. Lớp là sự trừu tượng hóa của tập các đối tượng có các thuộc tính, hành vi tương tự nhau, và được gom chung lại thành 1 lớp.
Ví dụ: lớp các đối tượng Sinhviên ○ Sinh viên “Nguyễn Văn A”, mã số TH0701001 → 1 đối tượng thuộc lớp Sinhviên ○ Sinh viên “Nguyễn Văn B”, mã số TH0701002 → là 1 đối tượng thuộc lớp Sinhviên 14 Các khái niệm cơ bản ➢ Hệ thống các đối tượng: là 1 tập hợp các đối tượng ○ Mỗi đối tượng đảm trách 1 công việc ○ Các đối tượng có thể quan hệ với nhau ○ Các đối tượng có thể trao đổi thông tin với nhau ○ Các đối tượng có thể xử lý song song, hay phân tán 15 LỚP VÀ ĐỐI TƯỢNG TRONG JAVA Lớp và đối tượng trong Java ➢ Là một kiểu dữ liệu để chứa định nghĩa những thuộc tính và phương thức (hành vi) dùng để mô tả một nhóm những đối tượng cùng loại. ➢ Mỗi class có thể có các thành phần: ○ Thuộc tính. ○ Phương thức 17 Lớp và đối tượng trong Java ● Thuộc tính ■ Một thuộc tính của một lớp là một trạng thái chung được đặt tên của tất cả các thể hiện của lớp đó có thể có. ■ Là các thông tin, trạng thái mà đối tượng của lớp đó có thể mang ■ Ví dụ: Lớp Ô tô có các thuộc tính ○ Màu sắc ○ Vận tốc ■ Bản chất của các thuộc tính là các thành phần dữ liệu của đối tượng 18 Lớp và đối tượng trong Java ● Thuộc tính ■ Các thuộc tính của cũng là các giá trị trừu tượng.
Mỗi đối tượng có bản sao các thuộc tính của riêng nó ■ Ví dụ: một chiếc Ô tô đang đi có thể có màu đen, vận tốc 60 km/h ■ Các thuộc tính phải được khai báo bên trong lớp 19 Lớp và đối tượng trong Java ● Phương thức ■ Xác định các hoạt động chung mà tất cả các thể hiện của lớp có thể thực hiện được. ■ Xác định cách một đối tượng đáp ứng lại một thông điệp ■ Thông thường các phương thức sẽ hoạt động trên các thuộc tính và thường làm thay đổi các trạng thái của lớp. ■ Bất kỳ phương thức nào cũng phải thuộc về một lớp nào đó ■ Ví dụ: Lớp Ô tô có các phương thức ● Tăng tốc ● Giảm tốc 20 Lớp và đối tượng trong Java ➢ Class là một kiểu dữ liệu nên object của class chính là biến thuộc kiểu dữ liệu đó. ● Class có các tính chất sau: ○ Đóng gói: chứa đựng dữ liệu và các hàm/thủ tục liên quan ○ Che giấu dữ liệu: các thực thể phần mềm khác không can thiệp trực tiếp vào dữ liệu bên trong được mà phải thông qua các phương thức cho phép ○ Trừu tượng: Lớp chính là kết quả của quá trình trừu tượng hóa dữ liệu: Lớp định nghĩa một kiểu dữ liệu mới, trừu tượng hóa một tập các đối tượng 21 Lớp và đối tượng trong Java ➢Khai báo lớp (class): class <ClassName> { <danh sách thuộc tính> <các khởi tạo> <danh sách các phương thức> } 22 Lớp và đối tượng trong Java ➢Thuộc tính: các đặc điểm mang giá trị của đối tượng, là vùng dữ liệu được khai báo bên trong lớp class <ClassName> { <Tiền tố> <kiểu dữ liệu> <tên thuộc tính>; } <Tiền tố> (access modifier) Kiểm soát truy cập đối với thuộc tính Còn gọi là phạm vi 23 Lớp và đối tượng trong Java ➢Phương thức: chức năng xử lý, hành vi của các đối tượng.
Phương thức xác định các hoạt động của lớp class <ClassName> { … <Tiền tố> <kiểu trả về> <tên phương thức>(<các đối số>){ … } } 24 Lớp và đối tượng trong Java o <kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp. o <Tên phương thức>: đặt theo qui ước giống tên biến. o <các đối số>: có thể rỗng 25 Các mức truy cập trong Java ➢Có 2 loại là Access Modifier và Non-access Modifier ● Access Modifer trong Java xác định phạm vi có thể truy cập của biến, phương thức, constructor hoặc lớp. Trong java, có 4 phạm vi truy cập của Access Modifier như sau: 1.
public ● Ngoài ra, còn có nhiều Non-access Modifier như static, abstract, synchronized, native, volatile, transient,. 26 Các mức truy cập trong Java ➢ Để bảo vệ dữ liệu tránh bị truy nhập tự do từ bên ngoài, Java sử dụng các từ khoá quy định phạm vi truy nhập các thuộc tính và phương thức của lớp: ● public: Thành phần công khai, truy nhập tự do từ bên ngoài. ● protected: Thành phần được bảo vệ, được hạn chế truy nhập. ● default (không viết gì): Truy nhập trong nội bộ gói.
● private: Truy nhập trong nội bộ lớp. 27 Các mức truy cập trong Java 28 Các mức truy cập trong Java 29 Các mức truy cập trong Java 30 Các mức truy cập trong Java 31 Các mức truy cập trong Java ● Đặc tính truy xuất của 4 loại modifier được thể hiện như sau: Private Default Protected Public Cùng class Yes Yes Yes Yes Cùng package, khác class No Yes Yes Yes Class con trong cùng No Yes Yes Yes package với class cha Khác package, khác class No No No Yes Class con khác package với No No Yes Yes class cha ● Lưu ý: Đối với class thì chỉ có 2 Access modifier đó là public và default. 32 Lớp và đối tượng trong Java ➢Tiền tố: ○ public: có thể truy cập được từ bên ngoài lớp khai báo. ○ protected: có thể truy cập được từ lớp khai báo và các lớp dẫn xuất (lớp con).
○ private: chỉ được truy cập bên trong lớp khai báo. ○ static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có thể được thực hiện kể cả khi không có đối tượng của lớp ○ final: không được khai báo nạp chồng ớ các lớp dẫn xuất. ○ abstract: không có phần source code, sẽ được cài đặt trong các lớp dẫn xuất. ○ synchoronized: dùng để ngăn những tác động của các đối tượngkhác lên đối tượng đang xét trong khi đang đồng bộ hóa.
Dùng trong lập trình multithreads. 33 Lớp và đối tượng trong Java Ví dụ 1: class Sinhvien { // Danh sách thuộc tính String maSv, tenSv, dcLienlac; int tuoi; … // Danh sách các khởi tạo Sinhvien(){} Sinhvien (…) { …} … // Danh sách các phương thức public void capnhatSV (…) {…} public void xemThongTinSV() {…} … } 34 Lớp và đối tượng trong Java … // Tạo đối tượng mới thuộc lớp Sinhvien Sinhvien sv = new Sinhvien(); … // Gán giá trị cho thuộc tính của đối tượng sv.maSv = “TH0601001” ; sv.tenSv = “Nguyen Van A”; sv.dcLienlac = “KP6, Linh Trung, Thu Duc”; … // Gọi thực hiện phương thức sv.maSv = “TH0601001”; /* Lỗi truy cập thuộc tính private từ bên ngoài lớp khai báo */ Sv.tenSv = “Nguyen Van A”; 36 Lớp và đối tượng trong Java ➢ Hàm khởi tạo (hàm dựng hoặc constructor): là một loại phương thức đặc biệt của lớp, dùng để khởi tạo một đối tượng. o Dùng để khởi tạo giá trị cho các thuộc tính của đối tượng. o Cùng tên với lớp.
o Không có giá trị trả về.