Bài giảng Lập trình Java - Bài 4: Lớp và đối tượng
KHÁI NIỆM VỀ ĐỐI TƯỢNG
Biểu diễn đối tượng trong thế giới thực
Mỗi đối tượng được đặc trưng bởi các thuộc tính
và các hành vi riêng của nóĐẶC ĐIỂM VÀ HÀNH VI
Đặc điểm
Hãng sản xuất
Model
Năm
Màu
Hành vi (Ô tô có thể làm gì?)
Khởi động
Dừng
Phanh
Bật cần gạt nước
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java - Bài 4: Lớp và đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Lập trình Java - Bài 4: Lớp và đối tượng
LẬP TRÌNH JAVA 1 BÀI 4: LỚP VÀ ĐỐI TƯỢNG MỤC TIÊU Kết thúc bài học này bạn có khả năng Hiểu rõ khái niệm đối tượng và lớp Mô hình hóa lớp và đối tượng Định nghĩa được lớp và tạo đối tượng Định nghĩa các trường, phương thức Định nghĩa và sử dụng hàm tạo Hiểu và sử package Sử dụng thành thạo các đặc tả truy xuất Hiểu được tính che dấu (encapsulation) KHÁI NIỆM VỀ ĐỐI TƯỢNG Biểu diễn đối tượng trong thế giới thực Mỗi đối tượng được đặc trưng bởi các thuộc tính và các hành vi riêng của nó ĐẶC ĐIỂM VÀ HÀNH VI Đặc điểm Hãng sản xuất Model Năm Màu Hành vi (Ô tô có thể làm gì?) Khởi động Dừng Phanh Bật cần gạt nước CLASS LÀ GÌ? Nhóm các Xe ô-tô Nhóm các Động vật ĐỊNH NGHĨA LỚP Lớp là một khuôn mẫu được sử dụng để mô tả các đối tượng cùng loại. Lớp bao gồm các thuộc tính (trường dữ liệu) và các phương thức (hàm thành viên) THUỘC TÍNH & PHƯƠNG THỨC Thuộc tính (field) Hãng sản xuất Model Năm Màu Phương thức (method) Khởi động() Dừng() Phanh() Bật cần gạt nước() Danh từ Đ ộng từ MÔ HÌNH LỚP VÀ ĐỐI TƯỢNG Ô tô Thuộc tính • Năm • Nhà sản xuất • Model • Màu Phương thức • Khởi động • Dừng • Phanh Ô tô của Dũng Thuộc tính • Năm = 2010 • Nhà SX=Honda • Model = Accord • Màu = Xanh Phương thức • Khởi động • Dừng • Phanh Ô tô của Mai Thuộc tính • Năm = 2012 • Nhà SX=BMW • Model = CS30 • Màu = Bạc Phương thức • Khởi động • Dừng • Phanh TÍNH TRỪU TƯỢNG (ABSTRACTION) Abstraction là công việc lựa chọn các thuộc tính và hành vi của thực thể vừa đủ để mô tả thực thể đó trong một bối cảnh cụ thể mà không phải liệt kê tất cả các thuộc tính, hành vi của thực thể có. Ví dụ: Mô tả một sinh viên ngành CNTT có rất nhiều thuộc tính và hành vi. Ở đây chúng ta chỉ sử dụng mã, họ và tên, điểm, ngành mà thôi, không cần thiết phải mô tả cao, nặng, hát, cười, nhảy cò cò ĐỊNH NGHĨA CLASS class > { > >; > >; > >([parameters]) { // body of method } > >([parameters]) { // body of method } } Khai báo các trường Khai báo các phương thức VÍ DỤ ĐỊNH NGHĨA LỚP Trường Phương thức Lớp Employee có 2 thuộc tính là fullname và salary và 2 phương thức là input() và output() TẠO ĐỐI TƯỢNG Đoạn mã sau sử dụng lớp Employee để tạo một nhân viên sau đó gọi các phương thức của lớp. Chú ý: Toán tử new được sử dụng để tạo đối tượng Biến emp chứa tham chiếu tới đối tượng Sử dụng dấu chấm (.) để truy xuất các thành viên của lớp (trường và phương thức). DEMO Tạo lớp mô tả sinh viên bao gồm họ tên, điểm và các phương thức nhập, xuất và xếp loại học lực > > ([danh sách tham số]) { // thân phương thức } ĐỊNH NGHĨA PHƯƠNG THỨC Phương thức là một mô-đun mã thực hiện một công việc cụ thể nào đó Trong lớp Employee có 2 phương thức là input() và output() Phương thức có thể có một hoặc nhiều tham số Phương thức có thể có kiểu trả về hoặc void (không trả về gì cả) Cú pháp VÍ DỤ PHƯƠNG THỨC Kiểu trả về là double nên thân phương thức phải chứa lệnh return số thực Kiểu trả về là void nên thân phương thức không chứa lệnh return giá trị MÔ HÌNH PHƯƠNG THỨC Mô hình Ví dụ Phương thức (thực hiện công việc cụ thể nào đó) {Tham số} {Kết quả} Math.min() {a, b} {min} setInfo() {fullname, salary} incomeTax() {} {Thuế} {} NẠP CHỒNG PHƯƠNG THỨC (OVERLOADING) Trong một lớp có thể có nhiều phương thức cùng tên nhưng khác nhau về tham số (kiểu, số lượng và thứ tự) Trong lớp MyClass có 4 phương thức cùng tên là method nhưng khác nhau về tham số public class MyClass{ void method(){} void method(int x){} void method(float x){} void method(int x, double y){} } VÍ DỤ NẠP CHỒNG PHƯƠNG THỨC Xét trường hợp overload sau Với lớp trên, bạn có thể sử dụng để tính tổng 2 hoặc 3 số nguyên. class MayTinh{ int tong(int a, int b){return a + b;} int tong(int a, int b, int c){return a + b + c;} } MayTinh mt = new MayTinh(); int t1 = mt.tong(5, 7); int t2 = mt.tong(5, 7, 9); HÀM TẠO (CONSTRUCTOR) Hàm tạo là một phương thức đặc biệt được sử dụng để tạo đối tượng. Đặc điểm của hàm tạo Tên trùng với tên lớp Không trả lại giá trị Ví dụ public class ChuNhat{ double dai, rong; public ChuNhat(double dai, double rong){ this.dai = dai; this.rong = rong; } } ChuNhat cn1 = new ChuNhat(20, 15); ChuNhat cn2 = new ChuNhat(50, 25); Lớp Đối tượng HÀM TẠO (CONSTRUCTOR) Trong một lớp có thể định nghĩa nhiều hàm tạo khác tham số, mỗi hàm tạo cung cấp 1 cách tạo đối tượng. Nếu không khai báo hàm tạo thì Java tự động cung cấp hàm tạo mặc định (không tham số) public class ChuNhat{ double dai, rong; public ChuNhat(double dai, double rong){ this.dai = dai; this.rong = rong; } public ChuNhat(double canh){ this.dai = canh; this.rong = canh; } } ChuNhat cn = new ChuNhat(20, 15); ChuNhat vu= new ChuNhat(30); TỪ KHÓA THIS this được sử dụng để đại diện cho đối tượng hiện tại. this được sử dụng trong lớp để tham chiếu tới các thành viên của lớp (field và method) Sử dụng this.field để phân biệt field với các biến cục bộ hoặc tham số của phương thức public class MyClass{ int field; void method(int field){ this.field = field; } } Trường Tham số DEMO + hoTen: String + diemTB: double SinhVien + xepLoai(): String + xuat(): void + nhap(): void + SinhVien() + SinhVien(hoTen, diemTB) Xây dựng lớp mô tả sinh viên như mô hình trên. Trong đó nhap() cho phép nhập họ tên và điểm từ bàn phím; xuat() cho phép xuất họ tên, điểm và học lực ra màn hình; xepLoai() dựa vào điểm để xếp loại học lực Sử dụng 2 hàm tạo để tạo 2 đối tượng sinh viên PACKAGE Package được sử dụng để chia các class và interface thành từng gói khác nhau. Việc làm này tương tự quản lý file trên ổ đĩa trong đó class (file) và package (folder) Ví dụ sau tạo lớp MyClass thuộc gói com.poly Trong Java có rất nhiều gói được phân theo chức năng java.util: chứa các lớp tiện ích java.io: chứa các lớp vào/ra dữ liệu java.lang: chứa các lớp thường dùng package com.poly; public class MyClass{} IMPORT PACKAGE Lệnh import được sử dụng để chỉ ra lớp đã được định nghĩa trong một package Các lớp trong gói java.lang và các lớp cùng định nghĩa trong cùng một gói với lớp sử dụng sẽ được import ngầm định package com.polyhcm; import com.poly.MyClass; import java.util.Scanner; public class HelloWorld{ public static void main(String[] args){ MyClass obj = new MyClass(); Scanner scanner = new Scanner(System.in); } } ĐẶC TẢ TRUY XUẤT Đặc tả truy xuất được sử dụng để định nghĩa khả năng cho phép truy xuất đến các thành viên của lớp. Trong java có 4 đặc tả khác nhau: private: chỉ được phép sử dụng nội bộ trong class public: công khai hoàn toàn {default}: Là public đối với các lớp truy xuất cùng gói Là private với các lớp truy xuất khác gói. protected: tương tự {default} nhưng cho phép kế thừa dù lớp con và cha khác gói. Mức độ che dấu tăng dần theo chiều mũi tên ĐẶC TẢ TRUY XUẤT package p1; public class A{ public int a; protected int b; int c; private int d; } package p1; public class B{ A x = new A(); void method(){ x.a = 1; x.b = 1; x.c = 1; x.d = 1; } } package p2; public class C{ A x = new A(); void method(){ x.a = 1; x.b = 1; x.c = 1; x.d = 1; } } package p3; public class D extends A{ void method(){ a = 1; b = 1; c = 1; d = 1; } } us e us e ex te nd s ENCAPSULATION Encapsulation là tính che dấu trong hướng đối tượng. Nên che dấu các trường dữ liệu Sử dụng phương thức để truy xuất các trường dữ liệu Mục đích của che dấu Bảo vệ dữ liệu Tăng cường khả năng mở rộng NON-ENCAPSULATION Giả sử định nghĩa lớp SinhVien và công khai hoTen và điểm như sau Khi sử dụng người dùng có thể gán dữ liệu cho các trường một cách tùy tiện Điều gì sẽ xảy ra nếu điểm hợp lệ chỉ từ 0 đến 10 public class SinhVien{ public String hoTen; public double diem; } public class MyClass{ public static void main(String[] args){ SinhVien sv = new SinhVien(); sv.hoTen = “Nguyễn Văn Tèo”; sv.diem = 20.5; } } ENCAPSULATION Để che dấu thông tin, sử dụng private cho các trường dữ liệu. private double diem; Bổ sung các phương thức getter và setter để đọc ghi các trường đã che dấu public void setDiem(double diem){ this.diem = diem; } public String getDiem(){ return this.diem; } ENCAPSULATION Chỉ cần thêm mã vào phương thức setDiem() để có những xử lý khi dữ liệu không hợp lệ public class SinhVien{ private String hoTen; private double diem; public void setHoTen(String hoTen){ this.hoTen = hoTen; } public String getHoTen(){ return this.hoTen; } public void setDiem(double diem){ if(diem 10){ System.out.println(“Điểm không họp lệ”); } else{ this.diem = diem; } } public String getDiem(){ return this.diem; } } public class MyClass{ public static void main(String[] args){ SinhVien sv = new SinhVien(); sv.setHoTen(“Nguyễn Văn Tèo”); sv.setDiem(20); } } QUI TẮC ĐẶT TÊN TRONG JAVA Tên (class, field, method, package, interface, variable) được đặt theo qui ước (mềm) như sau: Tên package: toàn bộ ký tự thường và dấu chấm java.util, com.poly Tên class, interface: Các từ phải viết hoa ký tự đầu class Employee{}, class SinhVien{}, class HinhChuNhat() Tên field, method, variable: Các từ phải viết hoa ký tự đầu ngoại trừ từ đầu tiên phải viêt thường hoTen, diem, fullName, mark setHoTen(), input(), setDiem() Tên class, field và variable sử dụng danh từ Tên phương thức sử dụng động từ TỔNG KẾT NỘI DUNG BÀI HỌC Khái niệm về đối tượng Khái niệm lớp Mô hình đối tượng và lớp Định nghĩa lớp Tạo đối tượng Định nghĩa phương thức Nạp chồng phương thức Hàm tạo Package Đặc tả truy xuất Encapsulation Qui ước đặt tên
File đính kèm:
- bai_giang_lap_trinh_java_bai_4_lop_va_doi_tuong.pdf