Chào các bạn! Truyen4U chính thức đã quay trở lại rồi đây!^^. Mong các bạn tiếp tục ủng hộ truy cập tên miền Truyen4U.Com này nhé! Mãi yêu... ♥

05 Dong goi va truu tuong hoa du lieu

LẬP TRÌNH JAVA

Bài 5: Đóng gói và trừu tượng hóa dữ liệu

Mục tiêu

 Kết thúc bài học bạn có thể nắm được:

 Nêu được bản chất, vai trò của trừu tượng hóa dữ liệu

 Giải thích về đóng gói và che giấu thông tin (Encapsulation & Information Hiding)

 Thực thi trong Java

 Khai báo một lớp trong Java

 Tạo các phương thức, các trường/thuộc tính

 Package trong Java

Nội dung

 5.1 Trừu trượng hóa dữ liệu

 5.2 Đóng gói và che giấu thông tin

 5.3 Khai báo lớp

 5.4 Các thành viên của lớp

 5.5 Chồng phương thức

 5.6 Gói (package)

5.1- Trừu tượng hóa dữ liệu

 Trừu tượng hóa dữ liệu (Data abstraction)

 Khi không thể nắm bắt toàn bộ đối tượng phức tạp

 Bỏ qua những chi tiết không cần thiết, thay vào đó là một mô hình đối tượng tổng quát.

 Lớp (Class) thay vì các đối tượng cụ thể, nhiều thông tin

5.1- Trừu tượng hóa dữ liệu

 Trừu tượng hóa dữ liệu (Data abstraction)

 Một cách nhìn hoặc cách biểu diễn một thực thể chỉ bao gồm các thuộc tính liên quan trong một ngữ cảnh nào đó.

 Tập hợp các thể hiện của các thực thể thành các nhóm có chung các thuộc tính gọi là Lớp (class).

 Ví dụ: Trừu tượng hóa các sinh viên cụ thể trong lớp học thành một lớp SinhVien.

Nội dung

 5.1 Trừu trượng hóa dữ liệu

 5.2 Đóng gói và che giấu thông tin

 5.3 Khai báo lớp

 5.4 Các thành viên của lớp

 5.5 Chồng phương thức

 5.6 Gói (package)

5.2- Đóng gói & che giấu tt

 Đóng gói và che giấu thông tin

 Dữ liệu/Thuộc tính và hành vi/Phương thức được đóng gói trong một lớp  Encapsulation

 Dữ liệu được che giấu ở bên trong lớp và chỉ được truy cập và thay đổi ở các phương thức bên ngoài  Data hiding.

Nội dung

 5.1 Trừu trượng hóa dữ liệu

 5.2 Đóng gói và che giấu thông tin

 5.3 Khai báo lớp

 5.4 Các thành viên của lớp

 5.5 Chồng phương thức

 5.6 Gói (package)

5.3- Khai báo lớp

 Đóng gói các thuộc tính (attributes/fields) và phương thức (methods)

 Thuộc tính và phương thức gọi là thành viên (members) của lớp

 Các lớp được nhóm lại thành package

 Một package bao gồm một tập hợp các lớp có quan hệ logic với nhau.

 Ví dụ: javax.swing, java.util...

 Lớp giống như một bản thiết kế; được sử dụng để tạo ra các đối tượng hay các thể hiện của lớp.

5.3- Khai báo lớp

 Khai báo lớp:

 Định danh trong khai báo lớp xác định tên của lớp

 Cú pháp khai báo:

chi_dinh_truy_cap class TenLop {

// Than lop

}

 chi_dinh_truy_cap:

 public: L ớp có th ể đư ợc truy c ập t ừ b ất c ứ đâu, k ể c ả bên ngoài package ch ứa l ớp đó.

 private: Ch ỉ có th ể đư ợc truy c ập trong ph ạm vi l ớp đó

 Không có (m ặc đ ịnh): L ớp có th ể đư ợc truy c ập t ừ bên trong package ch ứa l ớp đó.

5.3- Khai báo lớp

 Khai báo lớp:

5.3- Khai báo lớp

 Khai báo lớp thuộc gói (Package)

 L ớp có th ể khai báo thu ộc 1 package nào đó

 Cú pháp: package ;

 Ví d ụ:

 package com.hello;

public class HelloWorld {

...

}

Nội dung

 5.1 Trừu trượng hóa dữ liệu

 5.2 Đóng gói và che giấu thông tin

 5.3 Khai báo lớp

 5.4 Các thành viên của lớp

 5.5 Chồng phương thức

 5.6 Gói (package)

5.4- Các thành viên của lớp

 Bao gồm: Thuộc tính và phương thức  Ph ạm vi c ủa l ớp (gi ữa 2 d ấu { }):

 Bên trong ph ạm vi l ớp, các thành viên c ủa l ớp có th ể truy c ập thông qua tên g ọi.

 Bên ngoài ph ạm vi c ủa l ớp, có 2 ch ỉ đ ịnh truy c ập t ới các thành viên c ủa l ớp g ồm có: public và private  Tương t ự như l ớp.

5.4- Các thành viên của lớp

 Các chỉ định truy nhập:

5.4- Các thành viên của lớp

 Ví dụ:

public class HelloWorld1 {

// Cac thuoc tinh

private int iValue = 12;

float fValue = 3.45f; //package

// Phuong thuc main

public static void main(String args[])

{

System.out.println("Hello World!");

System.out.println("Gia tri nguyen: "+iValue);

System.out.println("Gia tri thuc: "+fValue);

}

}

5.4- Các thành viên của lớp

 Thuộc tính (Field/Attribute)

 Các đối tượng giữ lại trạng thái trong các thuộc tính (attributes) hay các trường (fields)

 Các thuộc tính được định nghĩa trong lớp.

 Mỗi đối tượng có bản sao các thuộc tính của riêng nó.

 Thuộc tính có thể được khởi tạo khi khai báo

 Các giá trị mặc định sẽ được sử dụng nếu không được khởi tạo.

5.4- Các thành viên của lớp

 Phương thức (method)

 Một phương thức là một tập các câu lệnh được nhóm lại với nhau nhằm thực hiện một công việc.

 Xác định cách một đối tượng đáp ứng lại thông điệp

 Phương thức xác định các hoạt động của lớp

 Tất cả các phương thức phải thuộc về một lớp nào đó.

 Cấu trúc của phương thức:

5.4- Các thành viên của lớp

 Phương thức (method)

 Cấu trúc của phương thức:

 parameter profile gồm kiểu, thứ tự, và số tham số của một phương thức.

 method signature (header) gồm tên phương thức và parameter profiles.

 Các tham số khai báo trong method header được gọi là tham số hình thức (formal parameters).

 Khi phương thức được gọi, các tham số hình thức được thay thế bởi các biến hoặc dữ liệu, được gọi là các tham số thực sự (actual parameters)

5.4- Các thành viên của lớp

 Phương thức (method)

 Chữ ký của phương thức (signature)

 Mỗi phương thức phải có một chữ ký riêng. Chữ ký của phương thức bao gồm:

 Tên phương thức

 Số lượng các tham số và kiểu của chúng

5.4- Các thành viên của lớp

 Phương thức (method)

 Kiểu dữ liệu trả về:

 Khi phương thức trả về ít nhất một giá trị hoặc một đối tượng thì bắt buộc phải có câu lệnh return để trả điều khiển cho đối tượng gọi phương thức.

 Nếu phương thức không trả về 1 giá trị nào thì kiểu trả về là void và có thể không cần câu lệnh return

 Có thể có nhiều lệnh return trong một phương thức; câu lệnh đầu tiên mà chương trình gặp sẽ được thực thi.

5.4- Các thành viên của lớp

 Phương thức (method)

 Cách gọi phương thức

5.4- Các thành viên của lớp

 Phương thức (method)

 Cách gọi phương thức

5.4- Các thành viên của lớp

 Phương thức (method)

 Câu lệnh trả về giá trị bắt buộc phải có đối với một phương thức non-void.

 Phương thức sau đúng về logic, nhưng có lỗi biên dịch vì trình biên dịch Java nghĩ rằng phương thức này không trả về bất kỳ giá trị nào.

public static int xMethod(int n) {

if (n > 0) return 1;

else if (n == 0) return 0;

else if (n

}

 Để sửa lỗi này, xóa if (n

5.4- Các thành viên của lớp

 Phương thức (method)

 Đôi khi có thể có nhiều hơn một đáp ứng khi gọi một phương thức, nhưng trình biên dịch không thể xác định được đáp ứng thích hợp nhất. Điều này được gọi là "Gọi mập mờ" (ambiguous invocation) - đây là một lỗi biên dịch.

5.4- Các thành viên của lớp

 Phương thức (method)

public class AmbiguousOverloading {

public static void main(String[] args) {

System.out.println(max(1, 2));

}

public static double max(int num1, double num2) {

if (num1 > num2)

return num1;

else

return num2;

}

public static double max(double num1, int num2) {

if (num1 > num2)

return num1;

else

return num2;

}

}

5.4- Các thành viên của lớp

 Phương thức (method)

 Biến cục bộ (local variable): biến được khai báo trong một phương thức.

 Phạm vi: phần chương trình mà biến có thể được tham chiếu.

 Phạm vi của một biến cục bộ bắt đầu từ khi khai báo đến cuối block chứa biến đó. Một biến cục bộ phải được khai báo trước khi sử dụng.

 Có thể khai báo một biến cục bộ trùng tên nhiều lần trong các khối riêng rẽ không lồng nhau trong một phương thức, nhưng không thể khai báo một biến cục bộ 2 lần trong các khối lồng nhau

5.4- Các thành viên của lớp

 Phương thức (method)

// Fine with no errors

public static void correctMethod() {

int x = 1;

int y = 1;

// i is declared

for (int i = 1; i

x += i;

}

// i is declared again

for (int i = 1; i

y += i;

}

}

5.4- Các thành viên của lớp

 Phương thức (method)

// With error

public static void incorrectMethod() {

int x = 1;

int y = 1;

for (int i = 1; i

int x = 0;

x += i;

}

}

5.4- Các thành viên của lớp

 Phương thức (method)

 Lợi ích của phương thức:

 Viết 1 lần, dùng nhiều lần.

 Giấu thông tin. Giấu sự thực hiện đối với user.

 Giảm độ phức tạp.

5.4- Các thành viên của lớp

 Cơ chế che giấu thông tin trong Java

 Các thành viên dữ liệu

 Chỉ có thể truy nhập từ các phương thức bên trong lớp.

 Chỉ định truy cập là private để bảo vệ dữ liệu

 Các đối tượng khác muốn truy nhập vào dữ liệu riêng tư này phải thông qua các phương thức public (accessor - get và mutator - set):

5.4- Các thành viên của lớp

 Mô tả lớp:

 + : public

 - : private

 # : protected

 Ví dụ:

 Xây d ựng l ớp SinhVien:

5.4- Các thành viên của lớp

 Ví dụ:

public class SinhVien

{

private String HoTen;

private String MaSo;

private float Diem;

public void HienThongTin()

{

System.out.println("Họ tên sinh viên: " + HoTen);

System.out.println("Mã số sinh viên: " + MaSo);

System.out.println("Điểm: " + Diem);

}

//Các phương thức get và set

//...

}

5.4- Các thành viên của lớp

public class SinhVien

{

//...

//Các phương thức get và set

public String getHoTen() {

return HoTen;

}

public void setHoTen(String ht) {

HoTen = ht;

}

//tương tự với thuộc tính MaSo

public float getDiem() {

return Diem;

}

public void setDiem(float d) {

Diem = d;

}

}

Nội dung

 5.1 Trừu trượng hóa dữ liệu

 5.2 Đóng gói và che giấu thông tin

 5.3 Khai báo lớp

 5.4 Các thành viên của lớp

 5.5 Chồng phương thức

 5.6 Gói (package)

5.5- Chồng phương thức

 Các phương thức có thể trùng tên nhưng các chữ ký thì phải khác nhau  Chồng phương thức (Method Overloading):

 Số lượng tham số khác nhau

 Nếu cùng số lượng tham số thì kiểu dữ liệu các tham số phải khác nhau

 Thuận tiện cho lập trình vì không cần phải nhớ quá nhiều tên phương thức mà chỉ cần nhớ một tên và lựa chọn các tham số cho phù hợp.

5.5- Chồng phương thức

 Ví dụ 1:

 Phương thức println() trong System.out.println() có 10 khai báo với các tham số khác nhau: boolean, char[], char, double, float, int, long, Object, String, và một không có tham số.

 Không cần sử dụng các tên khác nhau (chẳng hạn "printString" hoặc "printDouble") cho mỗi kiểu dữ liệu muốn in ra.

5.5- Chồng phương thức

 Ví dụ 2:

class MyDate {

public boolean setMonth(int m) { ...}

public boolean setMonth(String s) { ...}

}

...

MyDate d = new MyDate();

d.setMonth(9);

d.setMonth("September");

Nội dung

 5.1 Trừu trượng hóa dữ liệu

 5.2 Đóng gói và che giấu thông tin

 5.3 Khai báo lớp

 5.4 Các thành viên của lớp

 5.5 Chồng phương thức

 5.6 Gói (package)

5.6- Gói (Package)

 Các lớp có thể nhóm lại với nhau thành gói (package)

 Gói được coi như các thư mục, là nơi tổ chức các lớp

 Theo quy ước, tên của package được viết bằng các ký tự thường

 Các package khác nhau có thể chứa các lớp có cùng tên

 Khi nói đến tên lớp tức là nói đến tên đầy đủ của lớp bao gồm tên gói và tên lớp.

5.6- Gói (Package)

 Lợi ích của package:

 Giúp tổ chức các lớp vào các đơn vị (như là các thư mục) giúp xác định vị trí trở nên dễ dàng và sử dụng các lớp một cách phù hợp.

 Tránh cho việc đặt tên lớp bị xung đột (trùng tên).

 Bảo vệ các lớp, dữ liệu và phương thức ở mức rộng hơn so với mối quan hệ giữa các lớp.

 Các tên của gói có thể được sử dụng để nhận dạng các lớp.

 Các gói cũng có thể chứa các gói khác.

5.6- Gói (Package)

 Tham chiếu giữa các lớp:

 Trong cùng 1 package: Sử dụng tên lớp

 Khác package: Phải cung cấp tên đầy đủ cho các lớp được định nghĩa trong package khác.

 Ví dụ:

public class HelloNameDialog{

public static void main(String[] args){

String result;

result = javax.swing.JOptionPane.showInputDialog

("Hay nhap ten ban:");

javax.swing.JOptionPane.showMessageDialog(null,

"Xin chao "+ result + "!");

System.exit(0);

}

}

5.6- Gói (Package)

 Lệnh import:

 Sử dụng lệnh import để khai báo các package hoặc các lớp để khi sử dụng không cần nêu tên đầy đủ.

 Ví dụ:

import javax.swing.JOptionPane;

public class HelloNameDialog{

public static void main(String[] args){

String result;

result = JOptionPane.showInputDialog

("Hay nhap ten ban:");

JOptionPane.showMessageDialog(null,

"Xin chao "+ result + "!");

System.exit(0);

}

}

5.6- Gói (Package)

 Các Package cơ bản trong Java

 java.lang

 Cung cấp các lớp cơ bản cho thiết kế ngôn ngữ lập trình Java

 Bao gồm wrapper classes, String và StringBuffer, Object, ...

 Import ngầm định vào tất cả các lớp

 java.util

 Bao gồm tập hợp framework, mô hình sự kiện, date time, và nhiều tiện ích khác

 java.io

 Cung cấp khả năng vào / ra hệ thống với các luồng dữ liệu và hệ thống file

5.6- Gói (Package)

 Các Package cơ bản trong Java

 java.math

 Cung cấp các lớp thực thi các phép toán với số nguyên và các phép toán thập phân

 java.sql

 Cung cấp các API cho phép truy nhập và xử lý dữ liệu được lưu trữ trong một nguồn dữ liệu (thường sử dụng cơ sở dữ liệu quan hệ)

 javax.swing

 Cung cấp các lớp và giao diện cho phép tạo ra các ứng dụng đồ họa.

 ...

5.6- Gói (Package)

 java.math

 Các h ằng l ớp:

 PI

 E

 Các phương th ức l ớp:

 Các phương th ức lư ợng giác

 Các phương th ức s ố m ũ

 Các phương th ức làm tròn

 Các phương th ức min, max, abs, và random

5.6- Gói (Package)

 java.math

 Các phương th ức lư ợng giác

 Math.sin(double rad)

 Math.cos(double rad)

 Math.tan(double rad)

 Math.acos(double rad)

 Math.asin(double rad)

 Math.atan(double rad)

 Math.toRadians(double deg)

 Math.toDegrees(double rad)

5.6- Gói (Package)

 java.math

 Các phương thức lượng giác

Phương thức Giá trị trả về

 Math.sin(0) 0.0

 Math.sin(Math.PI/6) 0.5

 Math.cos(0) 1.0

 Math.cos(Math.PI/6) 0.866

5.6- Gói (Package)

 java.math

 Các phương thức số mũ

Phương thức Giá trị trả về

 Math.exp(double a) ea

 Math.log(double a) ln(a)

 Math.pow(double a, double b) ab

 Math.sqrt(double a) căn bậc hai của a

5.6- Gói (Package)

 java.math

 Các phương thức làm tròn

 double ceil(double x)

x được làm tròn lên giá trị nguyên gần nhất. Giá trị nguyên này được trả về như một giá trị thực.

 double floor(double x)

x được làm tròn xuống giá trị nguyên gần nhất. Giá trị nguyên này được trả về như một giá trị thực.

 double rint(double x)

x được làm tròn đến giá trị nguyên gần nhất. Nếu phần lẻ của x bằng 0.5 thì giá trị đó là số chẵn.

 int round(float x)

Trả về (int)Math.floor(x+0.5)

 long round(double x)

Trả về (long)Math.floor(x+0.5)

5.6- Gói (Package)

 java.math

 Các phương thức làm tròn

 Math.ceil(2.1) 3.0

 Math.ceil(-2.1) -2.0

 Math.floor(2.1) 2.0

 Math.floor(-2.1) -3.0

 Math.rint(2.1) 2.0

 Math.rint(-2.1) -2.0

 Math.rint(2.5) 2.0

 Math.round(2.6f) 3 (g/t int)

 Math.round(-2.6) -3 (g/t long)

 Math.round(2.0) 2 (g/t long)

5.6- Gói (Package)

 java.math

 Các phương thức min, max, abs, và random

 Math.max(a, b) ; Math.min(a, b)

Trả về giá trị lớn nhất / nhỏ nhất của 2 tham số a, b.

 Math.abs(a)

Trả về giá trị tuyệt đối của a.

 Math.random()

Trả về một giá trị double ngẫu nhiên trong khoảng

[0.0, 1.0).

5.6- Gói (Package)

 java.math

 Các phương thức min, max, abs, và random

 Math.max(2, 3) 3

 Math.max(2.5, 3) 3.0

 Math.abs(-2.4) 2.4

 10+(int)(Math.random()*20)

Số nguyên thuộc [10, 29]

 10 + (Math.random()*20)

Số thực thuộc [10.0, 30.0)

Bạn đang đọc truyện trên: Truyen4U.Com