1. Trang chủ
  2. » Công Nghệ Thông Tin

Programming - Lập Trình Giao Thức, Đường WAN Phần 3 pptx

22 245 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 244,58 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 private: Các thành phần được khai báo là private chỉ có thể được truy cập trong chính lớp đó  protected: Các thành phần được khai báo là protected có thể được truy cập và thừa kế bở

Trang 1

 Lớp do người dùng định nghĩa (user-defined)

<Kiểu trả về> có thể là kiểu nguyên thủy, kiểu lớp hoặc không có giá trị trả lại (kiểu void)

<Danh sách tham biến hình thức> bao gồm dãy các tham biến (kiểu và tên) phân cách với nhau bởi dấu phẩy

Các kiểu phạm vi hay kiểm soát truy cập

 public: Các thành phần được khai báo là public có thể được truy cập ở bất kỳ nơi

nào có thể truy cập được và chúng được thừa kế bởi các lớp con của nó

 private: Các thành phần được khai báo là private chỉ có thể được truy cập trong

chính lớp đó

 protected: Các thành phần được khai báo là protected có thể được truy cập và

thừa kế bởi các lớp con và có thể truy xuất bởi mã lệnh của cùng gói đó

Constructor

Constructor là một phương thức đặc biệt không có giá trị trả về và có tên trùng với tên lớp Trường hợp không có constructor nào được đưa ra trình biên dịch cung cấp constructor mặc định cho lớp đó

Một đối tượng được tạo mới và được cho trước một giá trị khởi đầu Các trường

có thể được khởi tạo bằng một giá trị khi chúng được khai báo, điều này đủ để đảm bảo một trạng thái khởi đầu đúng đắn

Các phương thức

Các phương thức của một lớp thường chứa mã có thể hiểu và thao tác một trạng thái của đối tượng Một số lớp có các trường public để người lập trình có thể thao tác trực tiếp, nhưng trong hầu hết các trường hợp điều này không phải là một ý tưởng tốt

public class Point

Trang 2

{

protected double x,y;

public Point(double x,double y)

Point p=new Point(3.0,6.0);

System.out.println("Thong tin ve toa do diem ban dau:");

Tham chiếu this

Thông thường, đối tượng nhận phương thức cần phải biết tham chiếu của nó

Trang 3

Trong lớp Point có constructor

public Point(double x,double y)

{

this.x=x;

this.y=y;

}

Giả sử nếu sửa đổi constructor bằng cách thay đổi như sau:

public Point(double x,double y)

2.4.2 Thừa kế trong Java

class Point3C extends Point2C

Trang 4

System.out.print(" z="+z);

}

public static void main(String[] args)

{

Point3C p=new Point3C(3.0,4.5,5.0);

System.out.println("Toa do ban dau:");

Trang 5

Thông thường, trong một ngôn ngữ lập trình thường có hai cách truyền tham biến cho một thủ tục: truyền theo tham trị và truyền theo tham chiếu

 Truyền theo tham trị

Phương thức sẽ sao chép giá trị của một tham biến vào tham biến hình thức của thủ tục Vì vậy, những thay đổi đối với tham số thủ tục sẽ không ảnh hưởng tới tham số thực sự

Gia tri a va b truoc khi goi phuong thuc:10 30

Gia tri a va b truoc sau goi phuong thuc:10 30

Tất cả các tham số đối với các phương thức Java là “gọi theo trị” Nghĩa là, các giá trị của các biến tham số trong một phương thức là các bản sao của các giá trị do người gọi xác định

Trang 6

Truoc khi goi ham:one=1.0

Sau khi chia:x=0.5

Sau loi goi ham chia:one =1.0

 Truyền theo tham chiếu

Một tham chiếu tới tham biến được truyền cho tham số Bên trong thủ tục, tham chiếu này được sử dụng để truy xuất tới tham số thực sự được xác định trong lời gọi Điều này nghĩa là những thay đổi đối với tham biến sẽ ảnh hưởng tới tham số đã được sử dụng để gọi phương thức

Mảng trong Java được xem là đối tượng Các phần tử của mảng có thể có kiểu nguyên thủy hoặc kiểu tham chiếu (kiểu lớp)

Ví dụ: Lọc ra phần tử lớn nhất của một mảng và đưa về cuối mảng

C:\MyJava\Baitap>java Loc

8 1 4 3 2 5

1 4 3 2 5 8

Vì trong Java các lời gọi hàm đều thực hiện theo tham trị (call by value) với kiểu nguyên

tố và tham chiếu đối với kiểu lớp nên hàm doiCho() thay đổi được các phần tử của day

 Các tham biến final

Tham biến hình thức có thể được khai báo với từ khóa final đứng trước Tham biến final

là tham biến không được khởi tạo giá trị cho đến khi nó được gán một trị nào đó và khi

đã được gán trị thì không thể thay đối giá trị đó được

Trang 7

HangSX banh = new HangSX();

int giaBan=20;

double tien = banh.tinh(10,giaBan);

System.out.println("Gia ban: "+giaBan);

System.out.println("Tien ban duoc: "+tien);

Khi biên dịch hàm tinh(), chương trình dịch sẽ thông báo lỗi và không được phép thay

đổi giá trị của biến final gia

 Các đối trong chương trình

Chúng ta có thể truyền các tham số cho chương trình trên dòng lệnh

Trang 8

2.4.4 Đa hình trong Java

 Các phương thức nạp chồng (overloaded method)

 Các phương thức nạp chồng là các phương thức nằm trong cùng một lớp

có cùng tên nhưng khác nhau về danh sách tham số

Các phương thức nạp chồng là một dạng của tính đa hình thời gian biên dịch

Trang 9

Kết quả:

C:\MyJava\Baitap>java TinhToan

Phep cong hai so nguyen :30

Phep cong hai so dau phay dong :75.65

Phep cong hai xau :Good Morning

Giải thích: Trong chương trình trên phương thức add() là phương thức được nạp chồng

Có ba phương thức có cùng tên add() nhưng có các tham số khác nhau Khi chúng ta gọi phương thức add()…????

2.4.5 Các thành phần static

Đôi khi các thành phần static ta cần phải định nghĩa các thành phần lớp được sử dụng độc lập với bất kỳ đối tượng nào của lớp Thông thường một thành phần của lớp phải được truy xuất thông qua đối tượng của lớp Tuy nhiên, ta có thể có thể tạo ra một thành phần mà được sử dụng độc lập Để tạo ra một thành phần như vậy trước khai

báo của mỗi thành phần ta đặt một từ khóa static Khi một thành phần được khai báo

static, nó có thể được truy xuất trước khi một đối tượng được tạo ra và không cần tham chiếu tới bất kỳ đối tượng nào Các thành phần static bao gồm: biến static, phương thức static, khối static

 Biến static

Biến static về cơ bản là biến tổng thể Khi các đối tượng của một lớp được khai báo, không có bản sao của biến đối tượng nào được tạo ra Thay vào đó, tất cả các đối tượng cùng chung một biến static

StaticVariable c1=new StaticVariable();

System.out.println("Bien dem count="+count);

StaticVariable c2=new StaticVariable();

System.out.println("Bien dem count="+count);

StaticVariable c3=new StaticVariable();

System.out.println("Bien dem count="+count);

}

}

Trang 10

Biến count được khai báo là static nên nó chỉ có một bản sao trong mọi đối tượng, vì vậy khi đối tượng được tạo ra thì các biến count được tăng lên 1 do trong hàm constructor biến count được tăng lên 1

 Phương thức static

Các phương thức được khai báo static có một số hạn chế sau:

o Chúng chỉ có thể gọi các phương thức static khác

o Chúng chỉ truy xuất tới các dữ liệu static

o Chúng không thể tham chiếu tới this và super

Nếu cần tính toán để khởi tạo các biến static, ta có thể khai báo khối static để nó có thể

xử lý ngay tức thời khi lớp lần đầu tiên được tải vào bộ nhớ Các khối static luôn được

Trang 11

final double pi=3.1416;

 Sử dụng final với thừa kế

Mặc dù nạp chồng phương thức là một trong các đặc trưng mạnh của Java, nhưng sẽ

có những lúc ta cần ngăn ngừa điều này xảy ra Để không cho phép một phương thức được nạp chồng, xác định từ khóa final như là một bổ từ tại đầu mỗi khai báo của nó Các phương thức được khai báo là final không thể được nạp chồng

Sử dụng từ khóa final để cấm thừa kế

Đôi khi ta cần cấm một số lớp không có lớp con Ta có thể thực hiện điều này bằng cách khai báo lớp với từ khóa final

Ví dụ

Trang 12

Ví dụ:

abstract class Hinh2D

{

double a,b,r;

public abstract double dientich();

public abstract double chuvi();

Trang 13

Hinh2D ht=new HinhTron(1);

System.out.println("Dien tich hinh tron ban kinh 1.0 la:"+ht.dientich()); System.out.println("Chu vi hinh tron ban kinh 1.0 la:"+ht.chuvi());

Hinh2D hcn=new HinhChuNhat(3,4);

System.out.println("Dien tich hinh chu nhat la:"+hcn.dientich());

System.out.println("Chu vi hinh chu nhat la "+hcn.chuvi());

}

};

Kết quả thực hiện chương trình

C:\MyJava>java AbstractDemo

Dien tich hinh tron ban kinh 1.0 la:3.141592653589793

Chu vi hinh tron ban kinh 1.0 la:6.283185307179586

Dien tich hinh chu nhat la:12.0

Chu vi hinh chu nhat la 14.0

Trong chương trình trên ta khai báo lớp trừu tượng Hinh2D, lớp này có các phương thức trừu tượng là dientich() để tính diện tích của hình và lớp chuvi() để tính chu vi Các lớp trừu tượng không được cài đặt mã lệnh

Các lớp HinhTron và HinhChuNhat là các lớp con cụ thể của lớp trừu tượng Hinh2D Các lớp này cài đặt các phương thức tính diện tích và chu vi cụ thể

2.6 Giao tiếp (Interface)

Trang 14

Thừa kế đóng một vai trò rất quan trọng trong việc tiết kiệm thời gian và công sức của người lập trình Hầu hết các chương trình trong thực tế đều sử dụng đa thừa kế Trong

đa thừa kế, chúng ta có thể thừa kế các phương thức và thuộc tính từ một số lớp khác nhau Java không hỗ trợ đa thừa kế Tuy nhiên, nhận thấy tầm quan trọng của đa thừa

kế trong Java, Java đã đưa ra khái niệm interface Với giao tiếp ta có thể xác định một lớp phải làm gì nhưng không xác định cách làm thế nào

o Một giao tiếp không phải là bộ phận của sơ đồ phân cấp lớp, các lớp

có thể thực thi cùng một giao tiếp

 Khai báo một giao tiếp

Cú pháp chung khi khai báo một giao tiếp là

public interface InterfaceName extends SuperInterfaces

Một khai báo giao tiếp có thể có một thành phần khác: danh sách các giao tiếp cha Một giao tiếp có thể thừa kế các giao tiếp khác, giống như một lớp có thể thừa kế hoặc là lớp của lớp khác Danh sách các giao tiếp cha được phân cách bởi dấu phẩy

Thân giao tiếp

Thân giao tiếp chứa các khai báo phương thức cho tất cả các phương thức có trong giao tiếp Một khai báo phương thức trong một giao tiếp kết thúc bởi dấu chấm phẩy (;)

vì một giao tiếp không cung cấp cách cài đặt cho các phương thức được khai báo trong

Một giao tiếp có thể chứa các khai báo hằng ngoài các khai báo phương thức Các khai báo thành phần trong một giao tiếp không được phép sử dụng một số từ khóa bổ trợ như private, protected transient, volatile, hoặc synchronized trong các khai báo thành phần của một giao tiếp

Trong ví dụ sau ta sẽ tìm hiểu cách định nghĩa một giao tiếp và cách thực thi một giao tiếp trong

public interface CalculatorInterface

{

Trang 15

public double add(double x, double y);

public double sub(double x, double y);

public double mul(double x, double y);

public double div(double x, double y);

}

 Thực thi giao tiếp

Một giao tiếp định nghĩa một tập hợp hợp các quy ước về hành vi Một lớp thực thi một giao tiếp tuân theo những quy ước đã được khai báo trong giao tiếp đó Để khai báo một lớp thực thi một giao tiếp, ta đưa vào mệnh đề implements trong khai báo lớp Một lớp có thể thực thi nhiều giao tiếp (Java hỗ trợ đa thừa kế giao tiếp), vì vậy sau từ khóa implements là một danh sách các giao tiếp được thực thi bởi một lớp

Chú ý: Mệnh đề implements đứng sau mệnh đề extends nếu tồn tại mệnh đề extends

class CalculatorTest implements CalculatorInterface

Trang 16

System.out.println("Cach chay chuong trinh: java CalculatorImpl so1 so2");

return;

} else {

Sử dụng giao tiếp như là một kiểu

Khi ta định nghĩa một giao tiếp mới, ta có thể định nghĩa kiểu dữ liệu tham chiếu mới Giao tiếp có thể được sử dụng khi khai báo một biến tham chiếu Giả sử MyInterface là một giao tiếp thì ta có thể khai báo như sau:

MyInterface mi;

2.7 Các gói và sử dụng gói trong Java

Các gói có các thành phần là các lớp, các interface, và các gói con có liên quan với nhau Việc tổ chức thành các gói có một số lợi ích sau đây:

o Các gói cho phép ta tổ chức các lớp thành các đơn vị nhỏ hơn (như các thư mục), và giúp cho việc định vị và sử dụng các lớp tương ứng trở nên dễ dàng hơn

o Tránh được các vấn đề về xung đột tên

o Cho phép ta bảo vệ các lớp, dữ liệu và các phương thức theo một quy mô lớn hơn so với phạm vi lớp

Trang 17

o Các tên gói có thể được sử dụng để định danh các lớp của bạn

 Truy xuất tới các thành phần của gói trong Java

Để truy xuất tới thành phần của gói trong Java ta có thể sử dụng cú pháp sau:

MyPackage.MyClass

MyPackage là tên gói, MyClass là tên lớp nằm trong gói MyPackage

 Khai báo các gói trong chương trình

Để có thể sử dụng các thành phần của một gói trong chương trình Java, ta cần phải khai báo gói cụ thể chứa lớp đó:

import ten_goi.*;// ten_goi: tên gói Với khai báo như trên, ta có thể truy xuất tới tất cả các lớp, các interface nằm trong gói

đó Để khai báo sử dụng một lớp cụ thể trong chương trình ta khai báo dòng lệnh sau:

import ten_goi.ten_lop; // ten_lop: tên lớp

Giả sử ta có gói MyPackge, bên trong gói MyPackage lại có một số gói con như SubPackage1, SubPackage2, ta có thể khai báo sử dụng các thành phần trong gói con SubPackage1 như sau:

import MyPackage.SubPackage1.*;

 Cách tạo ra các gói trong Java

Bước 1: Khai báo một gói trong Java

Giả sử ta khai báo một gói có tên là mypackage, bên trong gói này có lớp Calculator package mypackage;

public class Calculator

Trang 18

return a/b;

}

}

Bước 2: Biên dịch

C:\>javac -d C:\MyJava Calculator.java

Một vài điều cần lưu ý khi khai báo các thành viên của gói

Thứ nhất, các thành phần của gói cần được khai báo với thuộc tính public, nếu cần truy xuất chúng từ bên ngoài

2.6 Quản lý ngoại lệ (Exception Handling)

 Khái niệm

Trong quá trình xử lý, các ứng dụng có thể bất ngờ gặp các lỗi với các mức độ nghiêm trọng khác nhau Khi một phương thức tác động trên một đối tượng, đối tượng có thể phát hiện các vấn đề trạng thái bên trong (chẳng hạn các giá trị không nhất quán, như lỗi chia 0), phát hiện các lỗi với các đối tượng hay dữ liệu mà nó thao tác (như file hay địa chỉ mạng) xác định nó vi phạm các qui tắc cơ bản (như đọc dữ liệu từ một luồng đã

bị đóng), Rất nhiều người lập trình không thể kiểm tra tất cả các trạng thái lỗi có thể xảy ra

Exception cung cấp một cách để kiểm tra các lỗi mà không chia cắt mã Exception cũng đưa ra một cơ chế báo lỗi một cách trực tiếp chứ không sử dụng các cờ hay các hiệu ứng phụ

 Các ngoại lệ trong Java

Trong Java có một lớp Exception, mọi lớp ngoại lệ là lớp con của lớp này Lớp Exception là lớp con của lớp Throwable

Throwable

Exception

Trang 19

Hình 2.7 Lớp Throwable chứa một xâu được sử dụng để mô tả ngoại lệ Ngoại lệ được phân thành hai loại: Ngoại lệ được kiểm tra (checked exception) và ngoại lệ không được kiểm tra (unchecked exception)

Ngoại lệ được kiểm tra là ngoại lệ mà trình biên dịch sẽ kiểm tra phương thức của người lập trình và chỉ đưa ra ngoại lệ khi chúng được thông báo để đưa ra

Ngoại lệ không được kiểm tra là lớp con của các lớp Error; RuntimeException

Java cung cấp một mô hình quản lý các ngoại lệ cho phép kiểm tra các lỗi ở các vị trí có liên quan

 Khối try và catch

Cú pháp

o Khối try Bao gồm một tập hợp các lệnh có thể phát sinh ngoại lệ trong khi xử lý Một phương thức, có thể đưa ra một ngoại lệ cũng được đặt try

Các khối try lồng nhau

try

{

doFileProcessing();

Trang 20

displayResults();

} catch(Exception e) {

System er.println(e.getMessage());

}

Bất kỳ lỗi nào xảy ra trong quá trình xử lý doFileProcessing() hay displayResult() thì sẽ đựơc đón bắt bởi khối catch và được xử lý

Nếu có lỗi xảy ra trong quá trình xử lý doFileProcessing(), phương thức displayResult()

sẽ không bao giờ được gọi, và khối catch sẽ được xử lý

Một khối try có thể có nhiều khối catch và xử lý các kiểu khác nhau

try { } catch(Exception e) {

} catch(Exception e) {

} finally {

//Thực hiện công việc thu dọn }

Ngày đăng: 28/07/2014, 07:22

TỪ KHÓA LIÊN QUAN

w