Giáo trình Lập trình Java cơ bản - Trình độ: Cao đẳng - Trường Cao đẳng nghề kỹ thuật công nghệ
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình Java cơ bản - Trình độ: Cao đẳng - Trường Cao đẳng nghề kỹ thuật công nghệ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- giao_trinh_lap_trinh_java_co_ban_trinh_do_cao_dang_truong_ca.pdf
Nội dung text: Giáo trình Lập trình Java cơ bản - Trình độ: Cao đẳng - Trường Cao đẳng nghề kỹ thuật công nghệ
- BỘ LAO ĐỘNG -THƯƠNG BINH VÀ XÃ HỘI TRƯỜNG CAO ĐẲNG NGHỀ KỸ THUẬT CÔNG NGHỆ š› & š› GIÁO TRÌNH LẬP TRÌNH JAVA CƠ BẢN NGHỀ: CÔNG NGHỆ THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: 245/QĐ-CĐNKTCN ngày 23 tháng 10 năm 2020 của Hiệu trưởng Trường Cao đẳng nghề Kỹ thuật Công nghệ Hà Nội, năm 2021 (Lưu hành nội bộ) 0
- TUYÊN BỐ BẢN QUYỀN: Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo. Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm. MÃ TÀI LIỆU: MĐCNTT 20 1
- LỜI GIỚI THIỆU Ngôn ngữ lập trình java ra đời và được các nhà nghiên cứucủa Công ty Sun Microsystem giới thiệu vào năm 1995. Sau khi ra đời không lâu, ngôn ngữ lập trình này đã được sử dụng rộng rãi và phổ biến đối với các lập trình viên chuyên nghiệp cũngnhư các nhà phát triển phần mềm. Gần đây ngôn ngữ lập trình, công nghệ java đã được đưa vào giảng dạy ở các cơ sở đào tạolập trình viên chuyên nghiệp. Một số trường đại học ở Việt Nam dạy môn lập trình java như một chuyên đề tự chọn cho các sinh viên công nghệ thông tin giai đoạn chuyên ngành. Sau một thời gian tìm hiểu, làm việc và được tham gia giảng dạy chuyên đề lập trình java cho lớp cử nhân tin học từ xa qua mạng. Nhóm tác giả chúng tôi quyết định biên soạn cuốn giáo trình này nhằm phục vụ công tác giảng dạy cũng như học tập của sinh viên chuyên ngành công nghệ thông tin. Nội dung giáo trình tập trung vào những kiến thức căn bản nhất của lập trình java giúp người đọc bước đầu tiếp cập dễ dàng với công nghệ mới này, và đây cũng chính là một bước đệm để chúng ta trở thành “java shooter”. Một số vấn đề nâng trong ngôn ngữ lập trình java như: javabean, thiết kết giao diện dùng thư viện JFC(Java Foundation Class), lập trình mạng, lập trình cơ sở dữ liệu bằng java, lập trình ứng dụng web dùng J2EE (Java 2 Enterprise Edition), sẽ được nói đến trong các chuyên đề nâng cao. Để có thể đọc hiểu giáo trình này người đọc cần nắm vững các kiến thức về: nhập môn lập trình, lập trình hướng đối tượng. Đây là lần xuất bảnđầu tiên chắc chắn không thể tránh khỏi những sai sót. Nhóm tác giả rất mong nhận được những ý kiến đóng góp của quý thầy cô, các đồng nghiệp và bạn đọc để có.thể hoàn thiện hơn giáo trình này phục vụ cho việc học tập của sinh viên. Xin chân thành cảm ơn! Hà Nội, ngày 23 tháng 04 năm 2021 Tham gia biên soạn 1. Chủ biên Nguyễn Thị Thủy. 2. Tập thể Giảng viên Khoa CNTT Mọi thông tin đóng góp chia sẻ xin gửi về hòm thư nguyenthuyanc@gmail.com, hoặc liên hệ số điện thoại 0362234187 2
- MỤC LỤC Bài 1: TỔNG QUAN VỀ JAVA VÀ CÁC CÔNG NGHỆ TRONG JAVA 9 1.Lịch sử ra đời của Java 9 2. Một số tính của Java 9 3.Môi trường lập trình Java 9 4.Công nghệ Java 10 5. Các cấu trúc lập trình căn bản trong Java 11 5.1. Một chương trình Java cơ bản. 11 5.2. Các kiểu dữ liệu cơ bản 12 5.3. Các toán tử 14 5.4. Các cấu trúc điều khiển 14 5.5. Nhập dữ liệu từ bàn phím 16 5.6. Công cụ soạn thảo 18 5.7. Chỉ dẫn thực hành 19 BÀI TẬP 19 Bài 2: LỚP HƯỚNG ĐỐI TƯỢNG TRONG JAVA 20 1. Lớp 20 1.1. Lập trình hướng đối tượng-OOP 20 1.2. Lớp Time 20 1.3. Lớp TimeTest 22 1.4. Chạy TimeTest 22 2. Hướng đối tượng trong JAVA 23 2.1. Phạm vi truy cập 23 2.2. Từ khoá this 23 2.3. Nạp chồng hàm khởi tạo 23 3
- 2.4. Một số từ khoá 24 2.5. Kế thừa (Inheritance) 25 2.6. Cây kế thừa 25 2.7. Ví dụ về kế thừa trong Java 25 2.8. Từ khoá super 26 2.9. Đa hình (Polymorphism) 26 2.10.Lớp trừu tượng (abstract) 27 2.11. Lớp trừu tượng 27 2.12. Giao tiếp (interface) 28 2.13. Gói (package) 29 BÀI TẬP 30 Bài 3: Applet 32 1. Khái niệm Java Applet 32 2. Cấu trúc của một Applet 32 2.1 Sự khác nhau giũa Application và Applet 34 2.2 Những giới hạn bảo mật trên applet 36 3. Chu trình sống của một Applet 37 4 Truyền tham số cho Applet 38 5. Lớp Graphics 39 5.1 Vẽ các chuỗi, các ký tự và các byte 40 5.2 Vẽ đường thẳng (Line) và Oval 42 5.3 Vẽ hình chữ nhật (Rectangle) và hình chữ nhật bo góc (Rounded Rectangle) 43 5.4 Vẽ hình chữ nhật 3D và vẽ hình cung (Arc) 44 5.5 Vẽ hình PolyLine 44 5.6 Vẽ và tô đa giác (Polygon) 46 4
- 6. Điều khiển màu và font 47 6.1. Điều khiển màu 47 6.2 Điều khiển Font 49 6.3 Lớp FontMetrics 50 6.4. Chọn mode để vẽ 54 Bài 4: LẬP TRÌNH GIAO DIỆN 56 1. Cơ chế lập trình đồ hoạ giao diện 56 2.Thư viện AWT và Swing 65 3.Container và Component 66 3.Container và Component 73 3.1. Container 73 3.2. Component 76 3. Textfield 78 4. TextArea 79 5. CheckBox 80 6. CheckBoxGroup 81 7. Choice 83 8. List 85 4.Quản lý Layout 86 4.1. Giới thiệu về LayoutManager Interface 87 4.2. Giới thiệu về LayoutManager2 Interface 87 5.Lập trình GUI cơ bản 89 6.Lập trình GUI nâng cao 89 6.1. Các thành phần được giới thiệu 89 6.2. Vùng văn bản (TextArea). 89 5
- 6.3. Khung vẽ (Canvas) 91 6.4. Thanh trượt (Scroll bar) 92 6.5. Thanh trượt (Scroll bar) 93 6.6. Khung cuộn (ScrollPane) 93 6.7. Bố cục nâng cao 94 6.8. Khung chứa Frame 94 6.9. Cài đặt listener 96 9.10. Khung chứa Frame 96 BÀI TẬP 109 TÀI LIỆU THAM KHẢO 110 6
- GIÁO TRÌNH MÔN HỌC Tên mô đun: Lập trình java cơ bản Mã mô đun: MĐCNTT 20 Vị trí, tính chất, ý nghĩa và vai trò của mô đun : - Vị trí: Mô đun cơ sở lập trình JAVA căn bản thuộc nhóm các môn học chuyên ngành được bố trí giảng dạy sau khi đã học xong các môn học, mô đun cơ sở ngành như: Cơ sở dữ liệu, Ngôn ngữ lập trình C/C++, Lập trình hướng đối tượng, Cấu trúc dữ liệu và giải thuật. - Tính chất: Mô đun Cơ sở lập trình Java căn bản cung cấp các kiến thức cơ bản về các kỹ thuật lập trình nâng cao với ngôn ngữ Java. Giúp sinh viên làm quen với kỹ thuật lập trình giao diện và lập trình mạng; lập trình dịch vụ web với Java. Cung cấp cho sinh viên các kỹ năng làm chủ các kỹ thuật lập trình ứng dụng trên Java.Sinh viên sử dụng được các thư viện của Java để lập trình ứng dụng trong thực tế. Mục tiêu của mô đun: - Về kiến thức + Trình bày được các vấn đề cơ bản trong ngôn ngữ lập trình java như: kiểu dữ liệu, biến, khai báo thư viên, hàm, mảng, lớp đối tượng và các vấn đề cơ bản với lập trình hướng đối tượng. + Nêu và làm rõ thế mạnh từng lĩnh vực trong công nghệ java + Trình bày được các vấn đê cơ bản liên quan đến lập trịnh applet trong java như : các đối tượng giao diện cơ bản, Container, Component + Trình bày được các khái niệm về thuộc tính, phương thức, phạm vi truy cập của thuộc tính và phương thức của lớp và các đặc điểm của hướng đối tượng trong java. + Trình bày được nguyên lý và các đối tương sử dụng lập trình mạng trong java + Trình bày được khái niệm và chu kỳ sống của Applet - Về kỹ năng + Xây dựng được các ứng dụng cơ bản với ngôn ngữ lập trình Java + Vân dụng kỹ thuật lập trình hướng đối tượng trọng java, lập trình mạng, lập trình giao diện để xây dựng các module ứng dụng đơn giản như: gửi nhận tin online, offlinen trực tiếp giữa hai máy tính hoặc qua server. + Tạo và truyền được tham số cho Applet + Thiết kế và xây dựng được giao diện chương trình trong thực tế bằng Java. + Xây dựng được ứng dụng Client/Server - Về năng lực tự chủ và trách nhiệm + Tích cực ứng dụng lập trình trực quan cho các ứng dụng trong thực tế. + Khả năng tìm tài liệu, đọc hiểu tài liệu + Khả năng làm việc nhóm 7
- Nội dung của mô đun Thời gian Số Tên các bài trong mô đun TT Tổng Lý Thực Kiểm số thuyết hành tra* Bài 1: Tổng quan về Java và các công nghệ trong Java 1.Lịch sử ra đời của Java 1 2.Một số đặc tính của Java 10 3 7 3.Môi trường lập trình Java 4.Công nghệ Java 5.Các cấu trúc lập trình căn bản trong Java Bài 2: Lớp và hướng đối tượng trong JAVA 2 18 3 15 1.Lớp 2.Hướng đối tượng trong Java Bài 3: Applet 1.Khái niệm 2.Cấu trúc của một Applet 3 3.Chu trình sống của một Applet 12 4 8 1 4.Truyền tham số cho Applet 5.Lớp Graphics 6.Điều khiển màu va font Bài 4: Lập trình giao diện 19 5 13 1 1.Cơ chế lập trình đồ hoạ giao diện trong JAVA 2.Thư viện AWT và Swing 4 3.Container và Component 4.Quản lý Layout 5.Lập trình GUI cơ bản 6.Lập trình GUI nâng cao Thi kết thúc mô đun 1 1 Cộng 60 15 42 3 8
- Bài 1: TỔNG QUAN VỀ JAVA VÀ CÁC CÔNG NGHỆ TRONG JAVA Mã bài: MĐCNTT 20.1 Mục tiêu - Trình bày được các khái niệm liên quan đến Java và các công nghệ của Java. - Trình bày được các thư viện hỗ trợ cho từng nhóm ứng dụng trong Java. - Nêu được cấu trúc của một chương trình java cơ bản. - Thiết lập được giao diện lập trình java. - Hiểu cách thức xây dựng ứng dụng với giao diện và vào ra file. - Phân biệt các kỹ thuật lập trình và thư viện hỗ trợ của Java. Nội dung chính: 1.Lịch sử ra đời của Java Lịch sử phát triển của Java Ra đời tại Sun Microsystems bởi James Gosling 1991: Version đầu tiên với tên “Oak” (cây sồi) 1995: Tên chính thức là Java Mục đích của Java Dùng để phát triển ứng dụng cho các thiết bị điện tử “thông minh” Tạo các trang web có nội dung động (web applet) Hiện nay, Java được sử dụng để phát triển nhiều loại ứng dụng khác nhau: cơ sở dữ liệu, mạng, Internet, viễn thông 2. Một số tính của Java • Đơn giản • Hướng đối tượng • Đa nhiệm • An toàn • Garbage Collection • Máy ảo (biên dịch và thông dịch) • Khả chuyển (Portability) • Phân tán 3.Môi trường lập trình Java Java Platform Java Virtual Machine (Java VM) Java Application Programming Interface (Java API) 9
- Mã nguồn myProgram.java Java API Java VM Java Platform Hardware-Platform Java Development Kit – JDK • Bộ công cụ phát triển Java (jdk) gồm trình biên dịch, thông dịch, trợ giúp, soạn tài liệu và các thư viện chuẩn • Ngoài ra còn một số thư viện khác như JSP, JavaMail, Java TAPI • 1995: Version JDK 1.0 • 1998: Version JDK 1.2 (Java 2nd Platform) • 2004: Version JDK 1.5 4.Công nghệ Java Hai loại ứng dụng Java • Application: Ứng dụng độc lập • Applet: Ứng dụng chạy trên Web Thư viện lớp Java • Bộ JDK bao gồm rất nhiều lớp chuẩn đã được xây dựng sẵn. • Lập trình viên thường sử dụng các lớp chuẩn để phát triển ứng dụng. Các bước phát triển 10
- 5. Các cấu trúc lập trình căn bản trong Java 5.1. Một chương trình Java cơ bản. - Biên dịch chương trình • Vào chế độ Console của Windows • Gõ câu lệnh javac Hello.java • Nếu không có thông báo lỗi, file Hello.class sẽ được tạo ra - Thực thi chương trình • Gõ câu lệnh java Hello (không cần .class) 11
- Thay đổi cách hiển thị public class Hello { public static void main(String args[]) { System.out.print( “Chao\tmung\nban\nden\tvoi\nlap trinh Java\n" ); } public} class Hello { public static void main(String args[]) { Chao System.out.print(mung “Chao\tmung\nban\nden\tvoi\nlap trinh Java\n" ); ban } den} voi lap trinh Java 5.2. Các kiểu dữ liệu cơ bản - Java có hai kiểu dữ liệu • Dữ liệu gốc chuẩn: Là các kiểu dữ liệu đã được định nghĩa trong ngôn ngữ như số nguyên, số thực, ký tự, logic • Dữ liệu dẫn xuất: Do người dùng tự định nghĩa như mảng, lớp, giao tiếp - Ví dụ khai báo biến • int x; • Person ps; a. Kiểu số nguyên Kiểu Kích thước Khoảng giá trị byte 8 bits -256 255 short 16 bits -32768 32767 12
- int 32 bits -231 231 – 1 long 64 bits -264 264 – 1 b. Kiểu số thực Kiểu Kích thước Khoảng giá trị float 32 bits -3.4e38 3.4e38 double 64 bits -1.7e308 1.7e308 c. Kiểu boolean: Nhận giá trị true hoặc false d. Kiểu char: Kiểu ký tự theo chuẩn Unicode • Một số hằng ký tự Hằng Ý nghĩa \uxxxx Ký tự Unicode \t Tab ngang \n Xuống hàng \r Dấu enter \’ Nháy đơn e. Kiểu mảng • Khai báo: int[] iarray; hoặc int iarray[]; • Cấp phát: iarray = new int[100]; • Khởi tạo: int[] iarray = {1, 2, 3, 5, 6}; char[] carray = {‘a’, ‘b’, ‘c’}; Chú ý: Luôn khởi tạo hoặc cấp phát mảng trước khi sử dụng • Một số khai báo không hợp lệ: int[5] iarray; int iarray[5]; Kiểu mảng • Truy cập mảng iarray[3] = 0; 13
- carray[1] = ‘z’; Chú ý: Chỉ số của mảng được tính từ 0 • Lấy số phần tử mảng: iarray.length Quy tắc đặt tên biến • Bắt đầu bằng một chữ cái, một dấu gạch dưới (_) hoặc một dấu dollard ($) • Không có khoảng trắng giữa tên • Sau ký tự đầu có thể dùng ký tự, số, dấu dollard, dấu gạch dưới • Không trùng với các từ khoá • Ví dụ: a_1234_d, 1awas, _asdc, a sas, $erd, %ats • Chú ý: Java phân biệt chữ hoa chữ thường 5.3. Các toán tử Bảng toán tử = > = != && || ++ + - * / & | ^ % > >>> += -= *= /= &= |= ^= %= >= >>>= 5.4. Các cấu trúc điều khiển a. Lệnh if/else import java.util.Date; public class TestIf { public static void main( String args[ ] ) { Date today = new Date(); if( today.getDay() == 0 ) System.out.println(“Hom nay la chu nhat\n”); 14
- else System.out.println(“Hom nay khong la chu nhat\n" ); } } b. Lệnh switch import javax.swing.JOptionPane; public class TestSwitch { public static void main(String[] args) { char c; String str=JOptionPane.showInputDialog(null,"Nhap vao ky tu?"); c = str.charAt(0); switch(c) { case 'a': case 'e': case 'i': case 'o': case 'u': System.out.println("Ky tu nay la nguyen am"); break; default: System.out.println("Ky tu nay la phu am"); } System.exit(0); // kết thúc chương trình } } c. Vòng lặp for // Chương trình tính tổng các số lẻ từ 1 đến 100 public class TestFor { public static void main(String[] args) { int tong = 0; for(int i=1; i<=100; i+=2) tong+=i; 15
- System.out.println(tong); } } d. Vòng lặp while while ( ) ; // Tính tổng các số lẻ từ 1 đến 100 int tong = 0, i = 1; while (i ; } while ; // Tính tổng các số lẻ từ 1 đến 100 int tong = 0, i=1; do { tong+=i; i+=2; } while (i<=100); System.out.println(tong); 5.5. Nhập dữ liệu từ bàn phím Ví dụ nhập một số nguyên và một số thực import java.io.*; public class TestInput { public static void main(String[] args) throws Exception { 16
- BufferedReader inStream = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Nhap mot so nguyen:"); String siNumber = inStream.readLine(); int iNumber = Integer.parseInt(siNumber); System.out.print("Nhap mot so thuc:"); String sfNumber = inStream.readLine(); float fNumber = Float.parseFloat(sfNumber); System.out.println("So nguyen:“ + iNumber); System.out.println("So thuc:“ + fNumber); } } Ví dụ: Xây dựng đối tượng Circle • Cách 1: Sử dụng một file Circle.java duy nhất public class Circle { private int radius; public Circle(int r) { radius = r; } public double getArea() { return Math.PI*radius*radius; } public double getCircum() { return 2*Math.PI*radius; } public static void main(String[] args) { Circle c = new Circle(5); System.out.println("Area = " + c.getArea()); System.out.println("Circumference = " + c.getCircum()); } } Ví dụ về đối tượng Circle Cách 2: Sử dụng một file với 2 lớp riêng biệt public class TestCircle { 17
- public static void main(String[] args) { Circle c = new Circle(5); System.out.println("Area = " + c.getArea()); System.out.println("Circumference = " + c.getCircum()); } } class Circle { } Ví dụ về đối tượng Circle Cách 3: Sử dụng hai file riêng biệt // file TestCircle.java public class TestCircle { public static void main(String[] args) { } } // file Circle.java class Circle { } 5.6. Công cụ soạn thảo Notepad Jbuilder Eclipse EditPlus JCreator 18
- 5.7. Chỉ dẫn thực hành Đặt biến môi trường PATH: Trong Windows: Nháy phải trên My Computer, chọn Properties, chọn Advanced, chọn Enviroment Variables, chọn biến PATH và edit, thêm vào đường dẫn tới thư mục bin của bộ JDK. Trong chế độ Console: Gõ lệnh set Path=%Path%;đường dẫn tới bin Nên tham khảo java/docs khi làm việc BÀI TẬP 1. Viết chương trình tính tiền điện thoại: — Tiền thuê bao hàng tháng là 27000 đ. — Từ phút gọi thứ nhất đến phút thứ 200 giá cước là 120 đ/phút. — Từ phút gọi thứ 201 đến phút thứ 400 giá cước là 80 đ/phút. — Từ phút gọi 401 đến phút cuối giá cước là 40 đ/phút. 2. Viết chương trình giải phương trình bậc hai ax2 + bx + c = 0 với a,b,c nhập từ bàn phím. 3. Viết chương trình nhập vào một dãy các số nguyên khác 0, kết thúc nhập khi gặp số 0. Sau đó tính trung bình cộng của dãy số đó. Tìm số lớn nhất, số nhỏ nhất của dãy số. 4. Viết chương trình tính tổng E = 1 + 1/1 + 1/2 + 1/3 + + 1/n với n nhập vào từ bàn phím 5. Mở rộng lớp Circle : thêm dữ liệu toạ độ tâm hình tròn và phương thức kiểm tra một điểm cho trước có nằm trong hình tròn hay không. 6. Viết chương trình nhập vào một hình tròn, sau đó phát sinh 100 điểm ngẫu nhiên và cho biết có bao nhiêu điểm nằm trong hình tròn vừa nhập. 19
- Bài 2: LỚP HƯỚNG ĐỐI TƯỢNG TRONG JAVA Mã bài: MĐCNTT 20.2 Mục tiêu - Trình bày được các khái niệm về thuộc tính, phương thức, phạm vi truy cập của thuộc tính và phương thức của lớp. - Trình bày được các đặc điểm của hướng đối tượng trong java. - Khai báo và tạo được đối tượng của lớp. - Phân biệt được sự giống và khác nhau giữa các phương thức thường và các phương thức khởi tạo. Nội dung chính: 1. Lớp 1.1. Lập trình hướng đối tượng-OOP Lớp và đối tượng Dữ liệu và các thao tác trên dữ liệu được kết hợp trong cùng một đối tượng (object) Lớp (class) định nghĩa các tính chất của một tập hợp các đối tượng cùng kiểu Đối tượng là các thể hiện (instances) của lớp Đặc điểm của OOP Tính đóng gói (Encapsulation) Tính kế thừa (Inheritance) Tính đa hình (Polymorphism) Lớp Time và TimeTest nằm trong cùng thư mục Lớp Time nằm trong file Time.java. Nó chứa các định nghĩa về thời gian. Lớp TimeTest nằm trong file TimeTest.java. Nó dùng để kiểm tra lớp Time. Lớp TimeTest chứa hàm main. Khi chạy chỉ cần gõ: javac TimeTest.java java TimeTest Java sẽ tự động tìm và dịch file Time.java 1.2. Lớp Time // File Time.java import java.text.DecimalFormat; public class Time 20
- { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59 // Cau tu public Time() { setTime( 0, 0, 0 ); } // Ham thiet lap du lieu public void setTime( int h, int m, int s ) { hour = ( ( h >= 0 && h = 0 && m = 0 && s < 60 ) ? s : 0 ); } // Chuyen sang khuon dang thoi gian quoc te public String toUniversalString() { DecimalFormat twoDigits = new DecimalFormat( "00" ); return twoDigits.format( hour ) + ":" + twoDigits.format( minute ) + ":" + twoDigits.format( second ); } // Chuyen sang khuon dang thoi gian thong thuong public String toStandardString() { DecimalFormat twoDigits = new DecimalFormat( "00" ); return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" + twoDigits.format( minute ) + ":" + twoDigits.format( second ) + ( hour < 12 ? " AM" : " PM" ); } } // Ket thuc lop Time Dữ liệu Mỗi dữ liệu phải có một phạm vi nhất định Phương thức Cấu tử có tên trùng với tên lớp Cấu tử không có kiểu trả về 21
- Có thể có nhiều cấu tử (overloading) Mỗi phương thức phải có một phạm vi nhất định 1.3. Lớp TimeTest // File TimeTest.java import javax.swing.JOptionPane; public class TimeTest { public static void main( String args[ ] ) { Time time = new Time(); // Tao mot doi tuong kieu Time // Lay thoi gian String output = "The initial universal time is: " + time.toUniversalString() + "\nThe initial standard time is: “ + time.toStandardString(); // Dat lai thoi gian time.setTime( 13, 27, 6 ); output += "\n\nUniversal time after setTime is: " + time.toUniversalString() + "\nStandard time after setTime is: " + time.toStandardString(); // Dat lai thoi gian time.setTime( 99, 99, 99 ); output += "\n\nAfter attempting invalid settings: " + "\nUniversal time: " + time.toUniversalString() + "\nStandard time: " + time.toStandardString(); JOptionPane.showMessageDialog( null, output, "Testing Class Time1", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); } // Ket thuc ham main } // Ket thuc lop TimeTest 1.4. Chạy TimeTest • javac TimeTest.java 22
- • java TimeTest 2. Hướng đối tượng trong JAVA 2.1. Phạm vi truy cập - Private: Chỉ truy cập được từ trong lớp khai báo. - Protected: Truy cập được từ trong lớp khai báo, lớp con của của lớp khai báo và các lớp cùng gói với lớp khai báo. - Public: Truy cập được từ mọi nơi. - Mặc định: Truy cập được từ trong lớp khai báo và các lớp cùng gói với lớp khai báo. 2.2. Từ khoá this Từ khoá this chỉ đối tượng hiện thời public class Time { private int hour; // 0 - 23 private int minute; // 0 - 59 private int second; // 0 - 59 // Viet lai ham setTime public void setTime( int hour, int minute, int second ) { this.hour = ( ( hour >= 0 && hour = 0 && minute = 0 && second < 60 ) ? second : 0 ); } 2.3. Nạp chồng hàm khởi tạo // Ham khoi tao khong tham so 23
- public Time() { this( 0, 0, 0 ); } // Ham khoi tao mot tham so public Time( int h ) { this( h, 0, 0 ); } // Ham khoi tao hai tham so public Time( int h, int m ) { this( h, m, 0 ); } // Ham khoi tao ba tham so public Time( int h, int m, int s ) { setTime( h, m, s ); } // Ham sao chep public Time( Time time ) { this( time.hour, time.minute, time.second ); } // Su dung cac cau tu Time t1 = new Time(); // 00:00:00 Time t2 = new Time( 2 ); // 02:00:00 Time t3 = new Time( 21, 34 ); // 21:34:00 Time t4 = new Time( 12, 25, 42 ); // 12:25:42 Time t5 = new Time( 27, 74, 99 ); // 00:00:00 Time t6 = new Time( t4 ); // 12:25:42 2.4. Một số từ khoá Từ khoá final Áp dụng cho lớp, phương thức, biến. Lớp final: là lớp không thể có lớp con Public final class NoChild { } Biến final: là biến không thể thay đổi khi đã gán giá trị Private final int MAX = 100; Phương thức final: là phương thức không thể nạp chồng Public final void NoOverride(); -Từ khoá static Được dùng với phương thức và biến. Biến static: là biến chung cho mọi đối tượng của lớp, nó được truy cập qua đối tượng của lớp hoặc qua tên lớp. private static char TAB = ‘\t’; Phương thức static: là phương thức chỉ được phép truy cập tới các biến static của lớp, nó có thể gọi ngay cả khi chưa có đối tượng nào của lớp. 24
- public static void Welcome() { } 2.5. Kế thừa (Inheritance) -Kế thừa là việc xây dựng lớp mới dựa trên lớp đã có sẵn +Lớp đã có sẵn là lớp cha: superclass +Lớp mới là lớp con: subclass -Ví dụ: +Hình vuông kế thừa từ hình chữ nhật +Con ếch kế thừa từ loài động vật dưới nước -Chú ý: +Tính kế thừa thể hiện quan hệ “is a”, khác với quan hệ “has a” (composition) +Composition: một đối tượng chứa các đối tượng thuộc lớp khác. Ví dụ: ôtô có các bánh xe 2.6. Cây kế thừa 2.7. Ví dụ về kế thừa trong Java // File Sphere.java public class Sphere extends Circle Sphere kế thừa từ Circle { public Sphere (int radius ) { super(radius); // Goi cau tu cua lop cha } // Ham tinh dien tich bet mat. Nap chong ham getArea() public double getArea() { return 4*Math.PI*radius*radius; } 25
- // Ham tinh the tich public double getVolume() { return (4.0d/3)*Math.PI*radius*radius*radius; } } // File InheritanceTest.java public class InheritanceTest { public static void main(String[] args) { Circle circle = new Circle(5); Sphere sphere = new Sphere(2); System.out.println(“Radius of circle: " + circle.getRadius()); System.out.println("Radius of sphere: " + sphere.getRadius()); System.out.println("Area of circle: " + circle.getArea()); System.out.println(“Area of sphere: " + sphere.getArea()); System.out.println("Volume of sphere: " + sphere.getVolume()); } } 2.8. Từ khoá super -Từ khoá super chỉ đối tượng của lớp cha +super(radius): Gọi cấu tử của lớp cha -Question: Thêm phương thức tính diện tích mặt cắt qua tâm hình cầu ? -Answer: Đó chính là diện tích hình tròn // Them phuong thuc nay trong lop Sphere public double getAreaCut() { return super.getArea(); } // // Ham main, goi Tinh dien tich mat cat System.out.println(“Area cut of sphere: " + sphere.getAreaCut()); // 2.9. Đa hình (Polymorphism) Ví dụ 26
- 2.9. Đa hình (Polymorphism) -Tính đa hình thể hiện qua việc: cùng một phương thức nhưng có nội dung thực hiện khác nhau trên các đối tượng khác nhau. -Phương thức gọi được xác định thông qua đối tượng được tham chiếu, không thông qua kiểu khai báo của tham chiếu. -Trong Java, các phương thức luôn mang tính đa hình. 2.10.Lớp trừu tượng (abstract) -Lớp trừu tượng chỉ được dùng làm lớp cha cho các lớp khác, nó không có các thể hiện (instance). -Lớp trừu tượng định nghĩa các thuộc tính chung cho các lớp con của nó. -Ví dụ có thể thiết kế lớp Hình tròn, Hình vuông kế thừa từ lớp trừu tượng Hình. Lớp Hình có thuộc tính là tên hình, các phương thức tính diện tích, chu vi 2.11. Lớp trừu tượng -Lớp trừu tượng (abstract) thường có ít nhất một phương thức trừu tượng, là phương thức không có cài đặt. public abstract void draw(); -Khai báo lớp trừu tượng public abstract class ClassName { } -Các lớp con của một lớp cha trừu tượng phải cài đặt tất cả các phương thức trừu tượng. Nếu không nó cũng sẽ trở thành lớp trừu tượng. 27
- -Không thể tạo các đối tượng của một lớp trừu tượng nhưng có thể khai báo biến thuộc kiểu lớp trừu tượng để tham chiếu đến các đối tượng thuộc lớp con của nó. public abstract class Shape { static final double PI = 3.14159; public abstract double getArea(); public abstract double getVolume(); } class Circle extends Shape { double radius; public double getArea() { return PI*radius*radius; } public double getVolume() { return 0; } } class Cube extends Shape { double a, b, c; public double getArea() { return 2*(a*b+b*c+c*a); } public double getVolume() { return a*b*c; } } 2.12. Giao tiếp (interface) -Giao diện chỉ ra các “tính chất” mà một đối tượng có thể có, trong một “ngữ cảnh” nào đó. • Một người có thể khi ở nhà là một người con, ở trường là một sinh viên, ở lớp là một người bạn. -Giao diện trong Java có thể được dùng để thể hiện sự đa kế thừa như trong C++. -Khai báo giao tiếp interface Name { } -Một giao tiếp thường chỉ chứa các hằng static và các phương thức public chưa cài đặt. -Một giao tiếp có thể thừa kế một giao tiếp khác. -Một lớp có thể cài đặt (implements) một hay nhiều giao tiếp nhưng chỉ có thể thừa kế (extends) từ một lớp. interface Drawable 28
- { public void draw(); } public abstract class Shape { } public class Circle extends Shape implements Drawable { public void draw() { } } 2.13. Gói (package) -Package cho phép nhóm một tập hợp các lớp hoặc các giao tiếp có quan hệ với nhau để dễ dàng quản lý, bảo trì, phân phối -Ví dụ: Tạo package Transport chứa các lớp về phương tiện đi lại: Car, Moto, Boat +Đặt các lớp vào cùng thư mục Transport +Khai báo ở đầu mỗi lớp dòng package Transport; -Sử dụng package – cách 1: Khai báo import Ví dụ 1: import Transport.Car; Ví dụ 2: import Transport.*; Ví dụ 3: import java.awt.Point; Point p = new Point(1,2); -Sử dụng package – cách 2: Sử dụng trực tiếp java.awt.Point p = new java.awt.Point(1,2); javax.swing.JOptionPane.showMessageDialog( ); -Chú ý: Chỉ có thể truy cập được đến các lớp public trong các package Package java.lang.* được tự động import vào mọi chương trình Java vs C++ 1. Một chương trình Java chạy chậm hơn so với một chương trình C tương ứng khoảng 20 lần. 2. Java không có kiểu liệt kê (enum), kiểu cấu trúc (struct) hay hợp (union), nó chỉ có class. Mọi biến hay hàm của Java đều nằm trong một class nào đó. 3. Java không có toán tử phạm vi (scope) :: 29
- 4. Cỡ của các kiểu dữ liệu nguyên thuỷ (primitive) trong Java không phụ thuộc vào máy. Đặc biệt kiểu char có cỡ 16 bit (Unicode). 5. Biểu thức logic trong Java chỉ nhận giá trị boolean. 6. Trong Java, mọi biến không thuộc kiểu nguyên thuỷ đều phải tạo ra bằng từ khoá new. 7. Java không có tiền xử lý (preprocessor) 8. Java không có con trỏ. 9. Java không có huỷ tử (destructor), nó chỉ có phương thức finalize() được gọi bởi Garbage Collector. 10. Java không hỗ trợ đối số mặc định. 11. Java chỉ hỗ trợ kế thừa đơn, tất cả mọi lớp đều mặc định kế thừa từ lớp Object. 12. Java không có template. 13. Java không có từ khoá virtual. Tất cả mọi phương thức non-static đều luôn dùng dynamic binding. 14. Java không có quá tải toán tử (operator overloading). 15. Đối số của hàm luôn được xử lý như đối số giá trị (value argument). BÀI TẬP 1. Cài đặt lại các nội dung lý thuyết đã học. 2. Xây dựng lớp Candidate (Thí sinh) gồm các thuộc tính: mã, tên, ngày tháng năm sinh, điểm thi Toán, Văn, Anh và các phương thức cần thiết. 3. Xây dựng lớp TestCandidate để kiểm tra lớp trên: • Nhập vào 10 thí sinh • In ra thông tin về các thí sinh có tổng điểm lớn hơn 15 4. Xây dựng lớp Point có dữ liệu là 2 toạ độ x,y và các phương thức cần thiết. Thêm phương thức toString để trả về một String có dạng “[x, y]”. 5. Xây dựng lớp Rect có dữ liệu là điểm trên trái và dưới phải. Quá tải các cấu tử để cung cấp nhiều cách khởi tạo. Thêm các phương thức: Kiểm tra 1 điểm có nằm trong hình chữ nhật hay không. Tính giao của 2 hình chữ nhật. 6. Xây dựng lớp TestRect: Sinh ngẫu nhiên 10 hình chữ nhật và tính giao đôi một của chúng. 7. Xây dựng lớp Triangular có 3 phương thức static để tính diện tích tam giác theo 3 cách khác nhau: cạnh đáy và chiều cao, công thức Heron, độ dài 2 cạnh và góc. 8. Xây dựng lớp Employee có name và phương thức trừu tượng là earnings(). Xây dựng lớp Boss kế thừa từ Employee có cách tính lương là một khoản cố định hàng tháng. Xây dựng lớp PieceWorker có cách tính lương dựa trên số sản phẩm làm được, lương một sản phẩm là $ 0.5. Xây dựng lớp 30
- CommissionWorker có cách tính lương là một khoản cố định + tiền hoa hồng trên số sản phẩm bán được, mỗi sản phẩm được $ 0.1 hoa hồng. 9. Xây dựng lớp trừu tượng Animal có dữ liệu là name và weight, phương thức ảo là grow (tăng trọng lượng). 10. Xây dựng lớp Chicken kế thừa từ Animal, cài đặt phương thức ảo để mỗi lần grow thì trọng lượng tăng 0.3 kg. Xây dựng lớp Sparrow kế thừa từ Animal, mỗi lần tăng trọng lượng 0.05 kg. 11. Xây dựng giao diện Flyable có phương thức fly(). Cài đặt giao diện này trong lớp Sparrow. 31