Hướng đối tượng Các gói và giao diện

46 66 0
Hướng đối tượng  Các gói và giao diện

Đ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

Chương 4: CÁC GÓI GIAO DIỆN Mục tiêu bài học Kết thúc chương này, các bạn học viên có thể:  Định nghĩa một giao diện  Hiện thực một giao diện  Sử dụng giao diện như là một kiểu dữ liệu  Định nghĩa gói  Tạo và sử dụng các gói  Vai trò của các gói trong việc điều khiển truy cập  Những đặc trưng của gói java.lang  Những đặc trưng của gói java.util 4.1 Giới thiệu Gói và giao diện là hai thành phần chính của chương trình Java. Các gói được lưu trữ theo kiểu phân cấp, và được nhập (import) một cách tường minh vào những lớp mới được định nghĩa. Các giao diện có thể được sử dụng để chỉ định một tập các phương thức. Các phương thức này có thể được hiện thực bởi một hay nhiều lớp. Một tập tin nguồn Java có thể chứa một hoặc tất cả bốn phần nội tại sau đây:  Một câu lệnh khai báo gói. (package)  Những câu lệnh nhập thêm các gói hoặc các lớp khác vào chương trình (import)  Một khai báo lớp công cộng (public) đơn  Một số các lớp dạng riêng tư (private) của gói. Một tập tin nguồn Java sẽ có khai báo lớp public đơn. Tất cả những phát biểu khác tuỳ chọn. Chương trình có thể được viết trong một dòng các gói với các lệnh nhập (import), và lớp (class). 4.2 Các giao diện Giao diện là một trong những khái niệm quan trọng nhất của ngôn ngữ Java. Nó cho phép một lớp có nhiều lớp cha (superclass). Các chương trình Java có thể thừa kế chỉ một lớp tại một thời điểm, nhưng có thể hiện thực hàng loạt giao diện. Giao diện được sử dụng để thay thế một lớp trừu tượng, nơi mà không có một sự thực thi nào được kế thừa. Giao diện tương tự như các lớp trừu tượng. Sự khác nhau ở chỗ một lớp trừu tượng có thể có những hành vi cụ thể, nhưng một giao diện thì không thể có một phương thức cụ thể có hành vi của của riêng mình. Các giao diện cần được hiện thực. Một lớp trừu tượng có thể được mở rộng, nhưng không thể được mô tả bằng một ví dụ minh hoạ cụ thể. Các bước để tạo một giao diện được liệt kê ở dưới đây:  Định nghĩa giao diện: Một giao diện được định nghĩa như sau: Chương trình 4.1 Giao diện với các phương thức public interface myinterface { public void add(int x,int y); public void volume(int x,int y,int z); } Giao diện để định nghĩa các hằng public interface myconstants { public static final double price=1450.00; public static final int counter=5; }  Chương trình trên được dịch như sau: javac myinterface.java  Một giao diện được hiện thực với từ khoá “implements”. Trong trường hợp trên, giao diện cho phép ứng dụng mối quan hệ “is a” . Ví dụ: class demo implements myinterface  Nếu nhiều hơn một giao diện được thực thi, các tên sẽ được ngăn cách với nhau bởi một dấu phẩy. Điều này được trình bày như sau: class Demo implements MyCalc, Mycount Hãy ghi nhớ các lưu ý sau trong khi tạo một giao diện:  Tất cả các phương thức trong các giao diện này phải là kiểu public.  Các phương thức được định nghĩa trong một lớp mà lớp này hiện thực giao diện. 4.2.1 Hiện thực giao diện Các giao diện không thể mở rộng (extend) các lớp, nhưng chúng có thể mở rộng các giao diện khác. Nếu khi bạn hiện thực một giao diện mà làm mở rộng nó, bạn cần ghi đè (override) các phương thức trong giao diện mới này một cách hợp lý như trong giao diện cũ. Trong ví dụ trên, các phương thức chỉ được khai báo, mà không được định nghĩa. Các phương thức phải được định nghĩa trong một lớp mà lớp đó hiện thực giao diện này. Nói một cách khác, bạn cần chỉ ra hành vi của phương thức. Tất cả các phương thức trong các giao diện phải là kiểu public. Bạn không được sử dụng các bổ ngữ (modifers) chuẩn khác như protected, private…, khi khai báo các phương thức trong một giao diện. Đoạn mã Chương trình 4.2 biểu diễn một giao diện được thực thi như thế nào: Chương trình 4.2 import java.io.; class Demo implements myinterface { public void add(int x,int y) { System.out.println(“ “+(x+y)); Giả sử phương thức add được khai báo trong giao diện } public void volume(int x,int y,int z) { System.out.println(“ “+(xyz)); Giả sử phương thức volume được khai báo trong giao diện } public static void main(String args) { Demo d=new Demo(); d.add(10,20); d.volume(10,10,10); } } Khi bạn định nghĩa một giao diện mới, có nghĩa là bạn đang định nghĩa một kiểu tham chiếu dữ liệu mới. Bạn có thể sử dụng các tên giao diện ở bất cứ nơi đâu như bất kỳ tên kiểu dữ liệu khác. Chỉ có một thể hiện (instance) của lớp mà lớp đó thực thi giao diện có thể được gán đến một biến tham chiếu. Kiểu của biến tham chiếu đó là tên của giao diện. 4.3 Các gói Gói được coi như các thư mục, đó là nơi bạn tổ chức các lớp và các giao diện của bạn. Các chương trình Java được tổ chức như những tập của các gói. Mỗi gói gồm có nhiều lớp, vàhoặc các giao diện được coi như là các thành viên của nó. Đó là một phương án thuận lợi để lưu trữ các nhóm của những lớp có liên quan với nhau dưới một cái tên đặc biệt. Khi bạn đang làm việc với một chương trình ứng dụng, bạn tạo ra một số lớp. Các lớp đó cần được tổ chức một cách hợp lý. Điều đó sẽ dễ dàng để tổ chức các tập tin lớp thành các gói khác nhau. Hãy tưởng tượng rằng mỗi gói giống như một thư mục con. Tất cả các điều mà bạn cần làm là đặt các lớp và các giao diện có liên quan với nhau vào các thư mục riêng, với một cái tên phản ánh được mục đích của các lớp. Nói tóm lại, các gói có ích cho các mục đích sau:  Chúng cho phép bạn tổ chức các lớp thành các đơn vị nhỏ hơn (như là các thư mục), và làm cho việc xác định vị trí trở nên dễ dàng và sử dụng các tập tin của lớp một cách phù hợp.  Giúp đỡ để tránh cho việc đặt tên bị xung đột (trùng lặp định danh). Khi bạn làm việc với một số các lớp bạn sẽ cảm thấy khó để quyết định đặt tên cho các lớp và các phương thức. Đôi lúc bạn muốn sử dụng tên giống nhau mà tên đó liên quan đến lớp khác. Các gói giấu các lớp để tránh việc đặt tên bị xung đột.  Các gói cho phép bạn bảo vệ các lớp, dữ liệu và phương thức ở mức rộng hơn trên một nền tảng classtoclass.  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. Để tạo ra một lớp là thành viên của gói, bạn cần bắt đầu mã nguồn của bạn với một khai báo gói, như sau: package mypackage; Hãy ghi nhớ các điểm sau trong khi tạo gói:  Đoạn mã phải bắt đầu với một phát biểu “package”. Điều này nói lên rằng lớp được định nghĩa trong tập tin là một phần của gói xác định.  Mã nguồn phải nằm trong cùng một thư mục, mà thư mục đó lại là tên gói của bạn.  Quy ước rằng, các tên gói sẽ bắt đầu bằng một chữ thường để phân biệt giữa lớp và gói.  Các phát biểu khác có thể xuất hiện sau khai báo gói là các câu lệnh nhập, sau chúng bạn có thể bắt đầu định nghĩa lớp của bạn.  Tương tự tất cả các tập tin khác, mỗi lớp trong một gói cần được biên dịch.  Để cho chương trình Java của bạn có khả năng sử dụng các gói đó, hãy nhập (import) chúng vào mã nguồn của bạn.  Sự khai báo sau đây là hợp lệ và không hợp lệ : Hợp lệ package mypackage; import java.io.; Không hợp lệ import java.io.; package mypackage; Bạn có các tuỳ chọn sau trong khi nhập vào một gói:  Bạn có thể nhập vào một tập tin cụ thể từ gói: import java.mypackage.calculate  Bạn có thể nhập (import) toàn bộ gói: import java.mypackage.; Máy ảo Java (JVM) phải giữ lại một track (rãnh ghi) của tất cả các phần tử hiện hữu trong gói mà được khai báo. Bạn đã sẵn sàng làm việc với một phát biểu nhập import – java.io.. Bản thân Java đã được cài đặt sẵn một tập các gói, bảng dưới đây đề cập đến một vài gói có sẵn của Java: Gói Mô tả java.lang Không cần phải khai báo một cách rõ ràng. Gói này luôn được nhập cho bạn. java.io Bao gồm các lớp để trợ giúp cho bạn tất cả các thao tác nhập và xuất. java.applet Bao gồm các lớp để bạn cần thực thi một applet trong trình duyệt. java.awt Hữu dụng để tạo nên các ứng dụng giao diện đồ hoạ (GUI). java.util Cung cấp nhiều lớp và nhiều giao diện khác nhau để tạo nên các ứng dụng, các applet, như là các cấu trúc dữ liệu, các lịch biểu, ngày tháng, v.v.. java.net Cung cấp các lớp và các giao diện cho việc lập trình mạng TCPIP. Bảng 4.1 Các gói trong Java.

Chương 4: CÁC GÓI & GIAO DIỆN Mục tiêu học Kết thúc chương này, bạn học viên có thể:  Định nghĩa giao diện  Hiện thực giao diện  Sử dụng giao diện kiểu liệu  Định nghĩa gói  Tạo sử dụng gói  Vai trò gói việc điều khiển truy cập  Những đặc trưng gói java.lang  Những đặc trưng gói java.util 4.1 Giới thiệu Chương Gói giao diện hai thành phần chương trình Java Các gói lưu trữ theo kiểu phân cấp, nhập (import) cách tường minh vào lớp định nghĩa Các giao diện sử dụng để định tập phương thức Các phương thức thực hay nhiều lớp Chương Một tập tin nguồn Java chứa tất bốn phần nội sau đây:  Một câu lệnh khai báo gói (package)  Những câu lệnh nhập thêm gói lớp khác vào chương trình (import)  Một khai báo lớp công cộng (public) đơn  Một số lớp dạng riêng tư (private) gói Một tập tin nguồn Java có khai báo lớp public đơn Tất phát biểu khác tuỳ chọn Chương trình viết dòng gói với lệnh nhập (import), lớp (class) 4.1 Các giao diện Chương Giao diện khái niệm quan trọng ngơn ngữ Java Nó cho phép lớp có nhiều lớp cha (superclass) Các chương trình Java thừa kế lớp thời điểm, thực hàng loạt giao diện Giao diện sử dụng để thay lớp trừu tượng, nơi mà khơng có thực thi kế thừa Giao diện tương tự lớp trừu Các Gói & Giao Diện Java 11 Core tượng Sự khác chỗ lớp trừu tượng có hành vi cụ thể, giao diện khơng thể có phương thức cụ thể có hành vi của riêng Các giao diện cần thực Một lớp trừu tượng mở rộng, khơng thể mơ tả ví dụ minh hoạ cụ thể Chương Các bước để tạo giao diện liệt kê đây:  Định nghĩa giao diện: Một giao diện định nghĩa sau: Chương trình 4.1 Chương //Giao diện với phương thức Chương public interface myinterface Chương 10 { Chương 11 public void add(int x,int y); Chương 12 public void volume(int x,int y,int z); Chương 13 } Chương 14 //Giao diện để định nghĩa Chương 15 public interface myconstants Chương 16 { Chương 17 public static final double price=1450.00; Chương 18 public static final int counter=5; Chương 19 }  Chương trình dịch sau: javac myinterface.java  Một giao diện thực với từ khoá “implements” Trong trường hợp trên, giao diện cho phép ứng dụng mối quan hệ “is a” Ví dụ: class demo implements myinterface  Nếu nhiều giao diện thực thi, tên ngăn cách với dấu phẩy Điều trình bày sau: class Demo implements MyCalc, Mycount Các Gói & Giao Diện Java 22 Core Chương 20 Hãy ghi nhớ lưu ý sau tạo giao diện:  Tất phương thức giao diện phải kiểu public  Các phương thức định nghĩa lớp mà lớp thực giao diện 4.1.1 Hiện thực giao diện Chương 21 Các giao diện khơng thể mở rộng (extend) lớp, chúng mở rộng giao diện khác Nếu bạn thực giao diện mà làm mở rộng nó, bạn cần ghi đè (override) phương thức giao diện cách hợp lý giao diện cũ Trong ví dụ trên, phương thức khai báo, mà không định nghĩa Các phương thức phải định nghĩa lớp mà lớp thực giao diện Nói cách khác, bạn cần hành vi phương thức Tất phương thức giao diện phải kiểu public Bạn không sử dụng bổ ngữ (modifers) chuẩn khác protected, private…, khai báo phương thức giao diện Chương 22 Đoạn mã Chương trình 4.2 biểu diễn giao diện thực thi nào: Chương trình 4.2 Chương 23 import java.io.*; Chương 24 class Demo implements myinterface Chương 25 { Chương 26 public void add(int x,int y) Chương 27 { Chương 28 System.out.println(“ “+(x+y)); Chương 29 //Giả sử phương thức add khai báo giao diện Chương 30 } Chương 31 public void volume(int x,int y,int z) Chương 32 { Chương 33 System.out.println(“ “+(x*y*z)); Chương 34 //Giả sử phương thức volume khai báo giao diện Các Gói & Giao Diện Java 33 Core Chương 35 } Chương 36 public static void main(String args[]) Chương 37 { Chương 38 Demo d=new Demo(); Chương 39 d.add(10,20); Chương 40 d.volume(10,10,10); Chương 41 } Chương 42 } Chương 43 Khi bạn định nghĩa giao diện mới, có nghĩa bạn định nghĩa kiểu tham chiếu liệu Bạn sử dụng tên giao diện nơi đâu tên kiểu liệu khác Chỉ có thể (instance) lớp mà lớp thực thi giao diện gán đến biến tham chiếu Kiểu biến tham chiếu tên giao diện 4.1 Các gói Chương 44 Gói coi thư mục, nơi bạn tổ chức lớp giao diện bạn Các chương trình Java tổ chức tập gói Mỗi gói gồm có nhiều lớp, và/hoặc giao diện coi thành viên Đó phương án thuận lợi để lưu trữ nhóm lớp có liên quan với tên đặc biệt Khi bạn làm việc với chương trình ứng dụng, bạn tạo số lớp Các lớp cần tổ chức cách hợp lý Điều dễ dàng để tổ chức tập tin lớp thành gói khác Hãy tưởng tượng gói giống thư mục Tất điều mà bạn cần làm đặt lớp giao diện có liên quan với vào thư mục riêng, với tên phản ánh mục đích lớp Chương 45 Nói tóm lại, gói có ích cho mục đích sau:  Chúng cho phép bạn tổ chức lớp thành đơn vị nhỏ (như thư mục), làm cho việc xác định vị trí trở nên dễ dàng sử dụng tập tin lớp cách phù hợp  Giúp đỡ để tránh cho việc đặt tên bị xung đột (trùng lặp định danh) Khi bạn làm việc với số lớp bạn cảm thấy khó để định đặt tên cho lớp phương thức Đôi lúc bạn muốn sử dụng tên giống mà tên liên quan đến lớp khác Các gói giấu lớp để tránh việc đặt tên bị xung đột Các Gói & Giao Diện Java 44 Core  Các gói cho phép bạn bảo vệ lớp, liệu phương thức mức rộng tảng class-to-class  Các tên gói sử dụng để nhận dạng lớp Chương 46 Các gói chứa gói khác Chương 47 Để tạo lớp thành viên gói, bạn cần bắt đầu mã nguồn bạn với khai báo gói, sau: package mypackage; Chương 48 Hãy ghi nhớ điểm sau tạo gói:  Đoạn mã phải bắt đầu với phát biểu “package” Điều nói lên lớp định nghĩa tập tin phần gói xác định  Mã nguồn phải nằm thư mục, mà thư mục lại tên gói bạn  Quy ước rằng, tên gói bắt đầu chữ thường để phân biệt lớp gói  Các phát biểu khác xuất sau khai báo gói câu lệnh nhập, sau chúng bạn bắt đầu định nghĩa lớp bạn  Tương tự tất tập tin khác, lớp gói cần biên dịch  Để cho chương trình Java bạn có khả sử dụng gói đó, nhập (import) chúng vào mã nguồn bạn  Sự khai báo sau hợp lệ không hợp lệ : Hợp lệ Chương 49 package mypackage; Chương 50 import java.io.*; Không hợp lệ Chương 51 import java.io.*; Chương 52 package mypackage; Chương 53 Bạn có tuỳ chọn sau nhập vào gói:  Bạn nhập vào tập tin cụ thể từ gói: import java.mypackage.calculate  Bạn nhập (import) tồn gói: Các Gói & Giao Diện Java 55 Core import java.mypackage.*; Chương 54 Máy ảo Java (JVM) phải giữ lại track (rãnh ghi) tất phần tử hữu gói mà khai báo Chương 55 Bạn sẵn sàng làm việc với phát biểu nhập import – java.io.* Bản thân Java cài đặt sẵn tập gói, bảng đề cập đến vài gói có sẵn Java: Gói Mơ tả Chương Chương 56 57 java.lang Khơng cần phải khai báo cách rõ ràng Gói ln nhập cho bạn Chương Chương 58 59 java.io thao tác nhập xuất Chương Chương 60 61 java.apple t Bao gồm lớp để bạn cần thực thi applet trình duyệt Chương Chương 62 63 java.awt Bao gồm lớp để trợ giúp cho bạn tất Hữu dụng để tạo nên ứng dụng giao diện đồ hoạ (GUI) Chương Chương 64 65 java.util Cung cấp nhiều lớp nhiều giao diện khác để tạo nên ứng dụng, applet, cấu trúc liệu, lịch biểu, ngày tháng, v.v Chương Chương 66 67 java.net Cung cấp lớp giao diện cho việc lập trình mạng TCP/IP Chương 68 Bảng 4.1 Các gói Java Chương 69 Bên cạnh đó, Java cung cấp thêm nhiều gói để phát triển ứng dụng applet bạn Nếu bạn khơng khai báo gói đoạn mã bạn, lớp giao diện bạn sau kết thúc nằm gói mặc định mà khơng có tên Thơng thường, gói mặc định có ý nghĩa cho ứng dụng nhỏ ứng dụng tạm thời, ứng dụng mà bạn vừa bắt đầu để phát triển sau Khi bạn bắt đầu việc phát triển cho ứng dụng lớn, bạn có khuynh hướng phát triển số lớp Bạn cần tổ chức lớp thư mục khác để dễ dàng truy cập vận dụng Để làm điều này, bạn phải đặt chúng vào gói đặt tên Chương 70 Phần lớn việc làm với gói bạn có đặc quyền để sử dụng tên lớp giống nhau, bạn phải đặt chúng vào gói khác Các Gói & Giao Diện Java 66 Core 4.1.1 Tạo gói Chương 71 Gói phương thức hữu dụng để nhóm lớp mà tránh tên trùng Các lớp với tên giống đặt vào gói khác Các lớp định nghĩa người sử dụng nhó lại gói Chương 72 Các bước sau cho phép tạo nên gói người dùng định nghĩa:  Khai báo gói cách sử dụng cú pháp thích hợp Đoạn mã phải bắt đầu với khai báo gói Điều lớp định nghĩa tập tin phần gói xác định package mypackage;  Sử dụng phát biểu import để nhập gói chuẩn theo yêu cầu import java.util.*;  Khai báo định nghĩa lớp nằm gói Tất thành phần gói public, để truy cập từ bên Máy ảo Java (JVM) giữ lại track (rãnh ghi) tất phần tử nằm gói Chương 73 package mypackage; //khai báo gói Chương 74 import java.util.*; Chương 75 public class Calculate //định nghĩa lớp Chương 76 { Chương 77 int var; Chương 78 Calculate(int n) Chương 79 { Chương 80 … Chương 81 var = n; Chương 82 //các phương thức Chương 83 //… Chương 84 public class Display //định nghĩa lớp Chương 85 { Các Gói & Giao Diện Java 77 Core Chương 86 …//Các phương thức Chương 87 } Chương 88 } Chương 89 }  Lưu định nghĩa tập tin với phần mở rộng java, dịch lớp định nghĩa gói Việc dịch thực với chức “-d” Chức tạo thư mục trùng với tên gói, đặt tập tin class vào thư mục rõ javac –d d:\temp Calculate.java Chương 90 Nếu khai báo gói khơng có chương trình, lớp giao diện kết thúc gói mặc định mà khơng có tên.Nói chung, gói mặc định có nghĩa cho ứng dụng nhỏ tạm thời Chương 91 Hãy ghi nhớ điểm sau bạn khai thác gói người dùng định nghĩa chương trình khác:  Mã nguồn chương trình phải tồn thư mục với gói định nghĩa người sử dụng  Để cho chương trình Java khác sử dụng gói đó, khai báo chúng vào đoạn mã nguồn  Để nhập lớp ta dùng: import java.mypackage.Calculate;  Để nhập toàn gói, ta làm sau: import java.mypackage.*;  Tạo tham chiếu đến thành phần gói Ta dùng đoạn mã đơn giản sau: Chương 92 import java.io.*; Chương 93 import mypackage.Calculate; Chương 94 class PackageDemo{ Chương 95 public static void main(String args[]){ Chương 96 Chương 97 Các Gói & Giao Diện Java Calculate calc = new Calculate(); } 88 Core Chương 98 } Chương 99 Nếu phát biểu import cho gói khơng sử dụng, tên lớp phải đượcsử dụng với tên gói cho phù hợp với phương thức lớp Cú pháp sau: mypackage.Calculate calc = new mypackage.Calculate(); 4.1.1 Thiết lập đường dẫn cho lớp (classpath) Chương 100 Chương trình dịch chương trình thơng dịch tìm kiếm lớp thư mục hành, tập tin nén (zip) chứa tập tin class JDK Điều có nghĩa tập tin class JDK thư mục nguồn tự động thiết lập classpath cho bạn.Tuy nhiên, vài trường hợp, bạn cần phải tự thiết lập classpath cho bạn Chương 101 Classpath danh sách thư mục, danh sách trợ giúp để tìm kiếm tập tin class tương ứng Thông thường, ta không nên thiết lập môi trường classpath thời gian dài Nó thích hợp thiết lập CLASSPATH để chạy chương trình, ta thiết lập đường dẫn cho việc thực thi thời javac –classpath c:\temp Packagedemo.java Chương 102 Thứ tự mục classpath quan trọng Khi bạn thực thi đoạn mã bạn, mày ảo Java tìm kiếm mục classpath bạn giống thứ tự đề cập, tìm thấy lớp cần tìm Ví dụ gói Chương trình 4.3 Chương 103 Package mypackage; Chương 104 Public class calculate Chương 105 { Chương 106 public double volume(double height, double width,double depth) Chương 107 { Chương 108 return (height*width*depth); Chương 109 } Chương 110 public int add(int x,int y) Chương 111 { Các Gói & Giao Diện Java 99 Core Chương 112 return (x+y); Chương 113 } Chương 114 public int divide(int x,int y) Chương 115 { Chương 116 return (x/y); Chương 117 } Chương 118 } Chương 119 Để sử dụng gói này, bạn cần phải:  Khai báo lớp sử dụng  Khai báo tồn gói  Đề cập đến thành phần gói Chương 120 Bạn cần dịch tập tin Nó dịch với tuỳ chọn –d, nhờ đó, tạo thư mục với tên gói đặt tập tin class vào thư mục javac –d c:\temp calculate.java Chương 121 Chương trình biên dịch tạo thư mục gọi “mypackage” thư mục temp, lưu trữ tập tin calculate.class vào thư mục Chương 122 Ví dụ sau biểu diễn cách sử dụng gói: Chương trình 4.4 Chương 123 import java.io.*; Chương 124 import mypackage.calculate; Chương 125 Class PackageDemo{ Chương 126 public static void main(String args[]){ Chương 127 Calculate calc = new calculate(); Chương 128 int sum = calc.add(10,20); Chương 129 double vol = calc.volume(10.3f,13.2f,32.32f); Các Gói & Giao Diện Java 1010 Core Chương 457 Mỗi phần tử hashtable bao gồm khoá giá trị Các phần tử thêm vào bảng băm cách sử dụng phương thức put(), truy lục cách sử dụng phương thức get() Các phần tử xoá từ bảng băm với phương thức remove() Các phương thức contains() containsKey() sử dụng để tra cứu giá trị khoá bảng băm Một vài phương thức Hashtable tóm tắt bảng sau: Phương thức clear() Clone() contains(Object) ContainsKey(Object) elements() get(Object key) isEmpty() keys() put(Object, Object) rehash() remove(Object key) size() toString() Chương 458 Mục đích Xố tất phần tử từ bảng băm Tạo bảng Hashtable Trả True bảng băm chứa đối tượng định Trả True bảng băm chứa khoá định Trả bảng liệt kê yếu tố bảng băm Truy lục đối tượng kết hợp với khoá định Trả true bảng băm trống Trả bảng liệt kê khoá bảng băm Thêm phần tử vào bảng băm cách sử dụng khoá giá trị định Thay đổi bảng băm thành bảng băm lớn Xoá đối tượng cho khoá định Trả số phần tử bảng băm Trả đại diện chuỗi định dạng cho bảng băm Bảng 4.8 Các phương thức lớp Hashtable Chương 459 Chương trình sau sử dụng lớp Hashtable Trong chương trình này, tên tập ảnh khoá, năm phần tử Chương 460 “contains” sử dụng để tra cứu phần tử nguyên 1969, để thấy có danh sách chứa tập ảnh từ 1969 Chương 461 “containsKey” sử dụng để tìm kiếm cho khố “Animals”, để nhìn thấy tập ảnh tạo nên danh sách Chương 462 Phương thức “get()”được sử dụng để truy lục tập ảnh “Wish You Were Here” có bảng băm không Phương thức get() trả phần tử kết hợp với khoá, hai tên năm hiển thị điểm Chương trình 4.12 Các Gói & Giao Diện Java 3232 Core Chương 463 import java.util.*; Chương 464 public class HashTableImplementer Chương 465 { Chương 466 public static void main(String args[]) Chương 467 { Chương 468 //tạo bảng băm Chương 469 Hashtable ht = new Hashtable(); Chương 470 //thêm tập ảnh tốt Pink Floyd Chương 471 ht.put(“Pulse”, new Integer(1995)); Chương 472 ht.put(“Dark Side of the Moon”, new Integer(1973)); Chương 473 ht.put(“Wish You Were Here”, new Integer(1975)); Chương 474 ht.put(“Animals”, new Integer(1997)); Chương 475 ht.put(“Ummagumma”, new Integer(1969)); Chương 476 //Hiển thị bảng băm Chương 477 System.out.println(“Initailly: “+ht.toString()); Chương 478 //kiểm tra cho tập ảnh từ 1969 Chương 479 if(ht.contains(new Integer(1969))) Chương 480 System.out.println(“An album from 1969 exists”); Chương 481 //kiểm tra cho tập ảnh thú Chương 482 if(ht.containsKey(“Animals”)); Chương 483 System.out.println(“Animals was found”); Chương 484 //Tìm Chương 485 Integer year = (Integer)ht.get(“Wish You Were Here”); Các Gói & Giao Diện Java 3333 Core Chương 486 System.out.println(“Wish you Were Here was released in”+year.toString()); Chương 487 //Xoá tập ảnh Chương 488 System.out.println(“Removing Ummagumma\r\n”); Chương 489 ht.remove(“Ummagumma”); Chương 490 //Di chuyển thông qua bảng liệt kê tất khoá bảng Chương 491 System.out.println(“Remaining:\r\n”); Chương 492 for(Enumeration enum = ht.keys(); enum.hasMoreElements();) Chương 493 System.out.println((String)enum.nextElement()); Chương 494 } Chương 495 } Chương 496 Quá trình hiển thị kết mô tả đây: Chương 497 Hình 4.4 Quá trình hiển thị kết HashTableImplementer 4.1.1 Lớp random Chương 498 Lớp đại diện tạo số giả ngẫu nhiên (pseudo-random) Hai phương thức xây dựng cung cấp Một phương thức xây dựng lấy giá trị khởi đầu tham số Phương thức xây dựng khác khơng lấy giá trị tham số, sử dụng thời gian giá trị khởi đầu Việc xây dựng tạo số ngẫu nhiên với giá trị khởi đầu Các Gói & Giao Diện Java 3434 Core ý kiến hay, trừ bạn muốn tạo số ngẫu nhiên tạo tập giá trị giống Mặt khác, hữu dụng để tạo trình tự giống số random Điều có ý nghĩa việc gỡ rối chương trình Một tạo số ngẫu nhiên tạo ra, bạn sử dụng phương thức sau để truy lục giá trị từ nó:  nextDouble()  nextFloat()  nextGaussian()  nextInt()  nextLong() Chương 499 Các phương thức xây dựng phương thức lớp Random tóm tắt bảng sau: Phương thức random() random(long) nextDouble() nextFloat() nextGaussian() nextInt() nextLong() setSeed(long) Chương 500 4.1.1 Mục đích tạo tạo số ngẫu nhiên Tạo tạo số ngẫu nhiên dựa giá trị khởi tạo định Trả giá trị kiểu double 0.0D đến 1.0D từ tạo số ngẫu nhiên Trả giá trị kiểu float 0.0F 1.0F từ tạo số ngẫu nhiên Trả kiểu double phân phối Gaussian từ tạo số ngẫu nhiên Tạo giá trị Gaussian có giá trị trung bình 0, độ lệch tiêu chuẩn 1.0 Trả giá trị kiểu Integer từ tạo số ngẫu nhiên Trả giá trị kiểu long từ tạo số ngẫu nhiên Thiết lập giá trị khởi tạo từ tạo số ngẫu nhiên Bảng 4.9 Các phương thức lớp Random Lớp Vector Chương 501 Một vấn đề với mảng phải biết lớn tạo Nó khơng thể xác định kích thước mảng trước tạo Các Gói & Giao Diện Java 3535 Core Chương 502 Lớp Vector Java giải vấn đề Nó cung cấp dạng mảng với kích thước ban đầu, mảng tăng thêm nhiều phần tử thêm vào Một lớp Vector lưu trữ item kiểu Object, dùng để lưu trữ thể lớp Java Một lớp Vector đơn lẻ lưu trữ phần tử khác nhau, phần tử khác thể lớp khác Chương 503 Tại thời điểm, lớp Vector có dung lượng để lưu trữ số phần tử Khi lớp Vector biết dung lượng nó, dung lượng gia tăng số lượng riêng cho Vector Lớp Vector cung cấp ba phương thức xây dựng khác mà định dung lượng khởi tạo, tăng số lượng Vector, tạo Các phương thức xây dựng tóm tắt bảng sau: Phương thức Constructor Vector(int) Vector(int, int) Vector() Chương 504 Mục đích Tạo lớp Vector với dung lượng ban đẩu định Tạo lớp Vector với dung lượng ban đầu định, tăng số lượng Tạo lớp Vector với dung lượng khởi tạo mặc định, tăng số lượng Bảng 4.10 phương thức xây dựng lớp Vector Chương 505 Một mục (item) thêm vào lớp Vector cách sử dụng hàm addElement() Tương tự, phần tử thay cách sử dụng hàm setElementAt() Một lớp Vector tìm kiếm cách sử dụng phương thức contains(), phương thức trông dễ dàng cho lần xuất đối tượng (Object) Phương thức elements() hữu dụng trả bảng liệt kê đối tượng lưu trữ lớp Vector Các phương thức phương thức thành viên khác lớp Vector tóm tắt bảng đây: Phương thức addElement(Object) capacity() Clone() contains(Object) copyInto(Object []) Các Gói & Giao Diện Java Mục đích Chèn phần tử định vào lớp Vector Trả số phần tử mà vừa đủ cho phần cấp phát thời lớp Vector Bắt chước vector, phần tử Trả True lớp Vector chứa đối tượng định Sao chép phần tử lớp Vector vào mảng 3636 Core elementAt(int) elements() ensureCapacity(int) firstElement() indexOf(Object) indexOf(Object, int) insertElementAt(Object, int) isEmpty() lastElement() lastIndexOf(Object) lastIndexOf(Object, int) removeAllElements() removeElement(Object) removeElementAt(int) setElementAt(Object, int) setSize(int) setSize(int) Size() toString() Các Gói & Giao Diện Java định Truy lục phần tử cấp phát mục định Trả bảng liệt kê phần tử lớp Vector Chắc chắn lớp Vector lưu trữ dunglượng tối thiểu định Trả phần tử lớp Vector Tìm kiếm lớp Vector, trả mục zero cho khớp với đối tượng Tìm kiếm lớp Vector bắt đầu số mục định, trả mục zero cho khớp với đối tượng Thêm đối tượng định mục định Trả True lớp Vector khơng có phần tử Trả phần tử cuối lớp Vector Tìm kiếm lóp Vector, trả mục zero cho khớp với đối tượng cuối Tìm kiếm lớp Vector bắt đầu số mục định, trả mục zero cho khớp với đối tượng trước Xoá tất phần tử từ lớp Vector Xoá đối tượng định từ lớp Vector Xoá đối tượng mục định Thay đối tượng mục định với đối tượng định Thiết lập kích thước lớp Vector thành kích thước định Thiết lập kích thước lớp Vector thành kích thước định Trả số phần tử thời lớp Vector Trả đại diện chuỗi định dạng nội dung lớp Vector 3737 Core trimToSize() Chương 506 Định lại kích thước lớp Vector để di chuyển dung lượng thừa Bảng 4.11 Các phương thức lớp Vector Chương 507 Chương trình sau tạo lớp Vector “vect” Nó chứa phần tử: “Numbers In Words”, “One”, “Two”, “Three”, “Four”, “Five” Phương thức removeElement()được sử dụng để xoá phần tử từ “vect” Chương trình 4.13 Chương 508 import java.util.*; Chương 509 public class VectorImplementation Chương 510 { Chương 511 public static void main(String args[]) Chương 512 { Chương 513 Vector vect = new Vector(); Chương 514 vect.addElement(“One”); Chương 515 vect.addElement(“Two”); Chương 516 vect.addElement(“Three”); Chương 517 vect.addElement(“Four”); Chương 518 vect.addElement(“Five”); Chương 519 vect.insertElementAt(“Numbers In Words”,0); Chương 520 vect.insertElementAt(“Four”,4); Chương 521 System.out.println(“Size: “+vect.size()); Chương 522 System.out.println(“Vector “); Chương 523 for(int i = 0; i

Ngày đăng: 25/11/2019, 15:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan