Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
3,2 MB
Nội dung
Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Bài Giới thiệu lập trình Java Quá trình phát triển Java Cơ chế máy ảo Java (JVM) Các khái niệm Các cấu trúc điều khiển Cách lập trình Java Ø Ø Ø Ø Ø 1.1- Quá trình phát triển Java l l Nguồn gốc Java (Oak) Ứng dụng (applets) mở rộng ngày Ngôn ngữ Oak 1990 *Sun Microsystem* James Gosling, Bill Joy cộng 1993 Các thiết gia đình, cầm tay,… J2SE Ngơn ngữ Java Applets Hiện Internet J2EE J2ME 1.1- Quá trình phát triển Java l Giới thiệu tóm tắt công nghệ Java: J2SE, J2ME, J2EE l J2SE: Java Platform, Standard Edition l l J2ME: Java Platform, Micro Edition l l Phiên cho ứng dụng lớn, có phân tán, gồm nhiều cơng nghệ tích hợp Java Servlet, JavaServer Pages, JDBC, JMS, Java Webservice,… Các ưu điểm Java l l l l Phiên dành cho thiết bị nhỏ, J2SE thu nhỏ, gồm hai phần cấu hình (configuration) mơ tả (profile) J2EE: Java Platform, Enterprise Edition l l Phiên desktop Java, cung cấp GUI, threads, networking, XML, Applets, security, database,… Độc lập với thiết bị phần cứng (hệ nền) Độ an tồn cao Mức độ chuẩn hóa phần cao Các nhược điểm Java l l l Tốc độ chậm Khó sử dụng đặc tính hệ (taskbar Windows) Bộ thông dịch Java phải cài đặt máy đích Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 1.1- Quá trình phát triển Java l l So sánh công nghệ Java Microsoft.Net So sánh ngôn ngữ Java C++ Ngôn ngữ Java Công nghệ Microsoft.Net Các công nghệ J2SE Các ngôn ngữ C++ J2ME J2EE VB C# Ứng dụng lớn Object-Oriented Programming Java Structural programming Cú pháp tốt Mã nguồn mở C++ Tốc độ nhanh 1.2- Cơ chế máy ảo Java l Cách làm việc JVM 1.3- Các khái niệm l l Từ khóa (keywords): hầu hết giống ngôn ngữ C/C++ abstract default if private char while this boolean implements protected finally super throw break double import public long switch throws byte else instanceof return class package try case extends int short volatile for void catch final interface static new const Tên định danh (identifiers), quy ước đặt tên l l Tên dùng để định danh thành phần chương trình Quy ước tên Java: l l l l Tên lớp : chữ đầu từ viết hoa, lại viết thường (Frame, ActionEvent, …) Tên hàm : từ đầu viết thường, từ lại chữ đầu viết hoa (setVisible, close, getText, setDefaultCloseOperation,…) Các tên khác (biến, đối tượng,…) : viết chữ thường Tên : viết chữ hoa (CLOSE_ON_EXIT, YES_NO_OPTION,…) Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 1.3- Các khái niệm l Các liệu đơn giản, xâu cách viết liệu l l l l Các kiểu liệu nguyên thủy (int, long, float, double, char, boolean,…) Dữ liệu xâu ký tự (String) kiểu lớp đối tượng Các số viết bình thường, xâu phải dùng nháy kép (“…”), ký tự dùng nháy đơn (‘…’) Biến nhớ (varibles) tham chiếu (referrences) l l Biến nhớ chứa liệu, dành cho liệu đơn (int, float, char,…) Tham chiếu biến đặc biệt (như biến trỏ) để tham chiếu (trỏ) đến đối tượng mảng Dữ liệu iếu Tham ch Đối tượng int a; l LớpA b; Biến nhớ 1.3- Các khái niệm l Mảng quản lý theo tham chiếu l l l l Khai báo mảng: element_type[] ref_name; Tạo mảng: ref_name = new element_type[ num_elements ]; Xác định độ dài mảng: ref_name • length Mảng hai chiều, tham chiếu tương tự, chiều tham chiếu tham chiếu mảng tham chiếu • length Mảng int[ ] a = new int[ ]; int[ ][ ] b = new int[ ][ ]; mảng tham chiếu 1.3- Các khái niệm l Gói (packages), thư viện chứa lớp, đối tượng, hằng,… cung cấp cho việc lập trình l Phép tốn biểu thức l l java.awt, java.io, javax.swing,… gán = so sánh =, ==, !=, instanceof tăng, giảm ++, tác động bít &, |, ^ đa +, -, ~, !, (ép kiểu) kết nối lơgíc &&, || nhân, chia, chia dư *, /, % cộng, trừ, kết nối +, -, + dịch bít , >>> điều kiện ?: gán kết hợp +=, -=, *=, %=, Biểu thức kết hợp liệu với phép toán l l Kết thúc câu lệnh phải có dấu chấm phẩy (;), khối lệnh phải đóng khung cặp ký tự { } Chú thích Java viết sau dấu // cặp ký tự /* */ /** */ Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 1.4- Các cấu trúc điều khiển l Lệnh nhập/xuất liệu đơn giản l l System.out.print / printf( [định_dạng,] các_dữ_liệu ); new Scanner( System.in ) nextInt/Long/Line/Double/…(); l Lệnh rẽ nhánh l Lệnh lặp l l l if, switch for, while, do-while Lệnh break continue 1.5- Cách lập trình Java l Quy tắc viết chương trình đơn giản import tên_gói_cần_dùng; public class tên_lớp_chương_trình { public static void main( String [ ] args ) { lập trình chương trình } } l Chú ý: l l l Tên tệp chứa phải trùng với tên lớp chương trình, có phần mở rộng *.java Lệnh nạp gói thư viện import khơng dùng Một tệp chương trình nhiều lớp, lớp có quy định public 1.5- Cách lập trình Java l Cách thực chương trình Java l l Khi chạy chương trình máy tìm đến lớp trùng tên với tệp chương trình đó, thực hàm main Nếu khơng tìm thấy lớp khơng có hàm main xuất thơng báo lỗi Biên dịch chương trình javac l tên_tệp_ct.java Kiểm tra sửa lỗi có l Chạy thử chương trình l Chú ý: phải đặt đường dẫn tự động đến thư mục cài đặt java, chạy bên thư mục java tên_tệp_ct tham_số_nếu_có Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 1.5- Cách lập trình Java l Quy trình lập trình chương trình java Lập chương trình Java (*.java) Dịch chương trình (javac …) Có Lỗi? Khơng Chạy chương trình (java …) Kiểm tra kết Kết sai 1.5- Cách lập trình Java l Mơi trường lập trình Java 1.5- Cách lập trình Java l Ví dụ 1.1: Lập trình nhập hai số nguyên, tính in hiệu số lớn - số bé import java.util.*; public class Vidu_1_1 { public static void main(String[] args) { int a,b,c; Scanner s=new Scanner(System.in); System.out.print("Nhap so a:"); a=s.nextInt(); System.out.print("Nhap so b:"); b=s.nextInt(); c = (a>b)?a-b:b-a; System.out.print("\nHieu so la:"+c); } } Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 1.6- Bài tập l Bài tập tham khảo (http://longhlk.googlepages.com) l Bài tập tự làm l Nhập số nguyên, số thực tính tổng / C1_VD1.java Nhập hai số nguyên, tìm USCLN chúng / C1_VD2.java Nhập xâu, tách từ dịng / C1_VD3.java Tính tổng số viết tham số dịng lệnh, thơng báo khơng có tham số / C1_VD4.java Nhập hai điểm mặt phẳng, tính khoảng cách chúng Nhập mảng N số nguyên, hình, tìm số lớn vị trí Nhập xâu, đếm tần suất xuất ký tự xâu Bài tập kiểm tra (viết tay, dành cho SV vắng học) Nhập mảng N số thực, xếp mảng giảm dần hình, tính tổng số dương trung bình số âm Bài Lập trình HĐT Java ü ü ü ü ü Cách lập trình lớp & đối tượng Kỹ thuật kế thừa Java Kỹ thuật đa hình Java Lập trình gói (packages) Lập trình giao diện (interface) Bài Lập trình HĐT Java F2.1 Khái niệm LTHĐT l Các giai đoạn phát triển phần mềm nói chung Tìm hiểu, Khảo sát Phân tích hệ thống Thiết kế hệ thống Lập trình Kiểm thử Ứng dụng l Bảo trì, nâng cấp Bài tốn Đặc trưng lập trình hướng đối tượng (bao gói, che dấu, kế thừa, đa hình) Lớp Bổ sung Kế thừa l Khái niệm đối tượng, thuộc tính, phương thức, lớp, Khắc phục Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Bài Lập trình HĐT Java F2.2 LT lớp đối tượng l l Sự khác lớp đối tượng Cú pháp định nghĩa lớp thành viên phạm_vi class tên_lớp { phạm_vi đặc_tính kiểu thành_viên_dữ_liệu; … phạm_vi đặc_tính kiểu thành_viên_hàm( các_tham_số_nếu_có ); … } Bài Lập trình HĐT Java F2.2 LT lớp đối tượng l l l Phạm vi đặc tính thành viên phạm_vi = { private, protected, pubic, mặc-định } đặc_tính = { static, final } Đối tượng gọi phương thức tham_chiếu = new tên_lớp; tham_chiếu • tên_phương_thức(); Tham chiếu this Được định nghĩa mặc định (có sẵn) phương thức lớp, this tham chiếu đến đối tượng xử lý Ví dụ: Lập trình lớp đối tượng Nhân_viên, nhập danh sách, in tính tổng lương nhân viên (Ref:C2_VD1.java) Bài Lập trình HĐT Java F2.2 LT lớp đối tượng l l l l l Cách chạy phương thức qua Stack Khi gọi phương thức máy đẩy vào stack để chạy, xong giải phóng khỏi stack Cơ chế truyền trị tham số Mọi tham số phương thức có dạng tham trị Khơng có chế tham số gán giá trị mặc định Nạp chồng phương thức (C++) Phương thức tạo Có thể dùng từ khóa this để gọi thực phương thức tạo khác từ phương thức tạo Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Bài Lập trình HĐT Java F2.3 Kỹ thuật kế thừa l l Chỉ phép kế thừa đơn Cách định nghĩa lớp dẫn xuất phạm_vi class lớp_mới extends lớp_cũ { … định nghĩa thành viên cho lớp … } l Viết đè (overriding) phương thức Định nghĩa phương thức lớp hoàn toàn giống lớp cũ Khác với nạp chồng l Từ khóa super final - Từ khóa super cho phép gọi thành viên lớp sở bên lớp dẫn xuất - Từ khóa final quy định thành viên cuối cùng, khơng thể viết đè lại lớp dẫn xuất l Phương thức tạo kế thừa - Phương thức tạo thực theo thứ tự xuống - Gọi phương thức tạo lớp sở bên lớp dẫn xuất lệnh super(…); nằm lệnh Ví dụ: Lập trình hai lớp hình trịn (HT) hình elíp (HEL) có kế thừa, tính diện tích chu vi hai hình nhập (Ref:C2_VD2.java) Bài Lập trình HĐT Java F2.4 Kỹ thuật đa hình l Cơ chế đa hình l Đa hình tham chiếu từ khóa instanceof - Một tham chiếu lớp sở tham chiếu đến đối tượng lớp dẫn xuất trực tiếp gián tiếp - Từ khóa instanceof cho biết đối tượng tham chiếu thuộc lớp nào: tham_chiếu instanceof tên_lớp - Để gọi phương thức đối tượng qua tham chiếu sở phải ép kiểu ( ( kiểu_lớp_mới ) tham_chiếu_lớp_cũ ) • tên_phương_thức(…); l Mọi phương thức mặc định có thuộc tính ảo (virtual) Bài Lập trình HĐT Java F2.4 Kỹ thuật đa hình l l l Đa hình chạy phương thức ảo Khi chạy phương thức, máy tìm bắt đầu lớp dẫn xuất đối tượng tham chiếu, khơng thấy tìm ngược lên lớp sở thực phiên viết đè Đa hình tham số Tham số tham chiếu truyền đối tượng lớp lớp dẫn xuất từ Các lớp wrapper Lớp wrapper tạo để gói liệu nguyên thủy thành đối tượng, Integer, Float, Double, Character, Boolean, Long,… Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Bài Lập trình HĐT Java F2.4 Kỹ thuật đa hình l Danh sách đối tượng khác kiểu Dùng mảng tham chiếu sở để quản lý đối tượng dẫn xuất khác kiểu Bài Lập trình HĐT Java F2.5 Cơ chế ảo trừu tượng l Phương thức ảo đa hình Một phương thức lớp sở gọi phương thức lớp dẫn xuất chế ảo đa hình l Lớp trừu tượng - Là lớp không dùng để tạo đối tượng, quy định từ khóa abstract đầu lớp - Lớp trừu tượng dùng đóng vai trị lớp sở, cấm khơng cho tạo đối tượng xử lý từ lớp l Phương thức trừu tượng - Là phương thức khơng lập trình, phải quy định từ khóa abstract - Một lớp chứa phương thức trừu tượng bắt buộc lớp phải trừu tượng Ví dụ: Lập trình có chế ảo, trừu tượng đa hình? Bài Lập trình HĐT Java F2.6 Lập trình gói l l Khái niệm gói Gói kỹ thuật lập trình thư viện, cho phép tổ chức lớp theo cấu trúc phân cấp, tạo khơng gian tên cho lớp Gói Gói Lớp Lớp Lớp Lớp Lớp Cách tổ chức lớp theo góiLớp - Các gói tổ chức phân cấp theo thư mục, gói tương ứng với thư mục chứa lớp Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Bài Lập trình HĐT Java F2.6 Lập trình gói l Cách tạo gói cho lớp - Các lớp tạo chép vào thư mục ứng với gói, tệp chương trình gói phải sử dụng từ câu lệnh sau để định nghĩa gói: package tên_gói_cấp1 • tên_gói_cấp2 • ; l Cách sử dụng gói khơng gian tên lớp - Để sử dụng gói chươ ng trình ta sử dụng lệnh import, chương trình dùng tất lớp gói - Có thể sử dụng lớp trực tiếp với tên đầy đủ sau: tên_gói_cấp1 • tên_gói_cấp2 • tên_lớp - Java sử dụng biến mơi trường CLASSPATH Windows để xác định đường dẫn tự động tìm kiếm đến gói lớp (Thư mục KL) abc.java package KL; public class abc { … } KL abc.java myprogram.java HL khali.java yourprogram.java myprogram.java package KL; public class myprogram { … } yourprogram.java package KL; public class yourprogram { … } khali.java package KL.HL; public class khali { … } (Thư mục KL\HL) Bài Lập trình HĐT Java F2.6 Lập trình gói l Sự ảnh hưởng phạm vi truy xuất đến gói lớp Phạm vi public private Ý nghĩa Truy xuất nơi thành viên có phạm vi này, lớp, gói ngồi lớp, ngồi gói Chỉ phép truy xuất bên lớp tươ ng ứng protected Được phép truy xuất từ lớp gói, từ lớp qua kế thừa lớp gói khác Mặc-định Tức khơng quy định phạm vi cho thành viên khai báo, phép truy xuất từ lớp bên gói Ví dụ: Tạo gói chứa hai lớp bất kỳ, sử dụng gói tạo hai đối tượng thử / C2_VD3 Bài Lập trình HĐT Java F2.7 Lập trình giao diện l Khái niệm giao diện - Giao diện tập phương thức trừu tượng (chỉ khai báo, chưa lập trình) - Giao diện dùng để trích phương thức cần thiết từ lớp, hiểu giao diện thể lớp với người lập trình Lớp A Lớp C l Lớp B Định nghĩa giao diện interface tên_giao_diện { } Giao diện Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội 10 Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Lập trình kiểu Screen l ChoiceGroup đối tượng chọn theo danh sách: l ChoiceGroup( label, type ); l append( text, image ); getString( index ) / getImage( index ); isSelected( index ) / getSelectedIndex(); setItemCommandListener( ItemCommandListener O); l l l l l type = Choice EXCLUSIVE, MULTIPLE, POPUP ItemCommandListener, lập trình hàm xử lý sau l public void commandAction( Command c, Item i ) { } Lập trình kiểu Screen l TextBox mở rộng TextField, khơng đặt lên form, Displayable đặt trực tiếp lên hình Display l l l l l l l TextBox( title, text, size, constraint ); delete( offset, length ); getString(); setTitle( title ); setMaxSize( size ); insert( src, pos ); List đối tượng danh sách hiển thị hình l l List( title, type ); List( title, type, string_elements[], image_elements[] ); type Choice.{EXCLUSIVE, IMPLICIT, MULTIPLE, } Lập trình kiểu Screen l Ticker dịng chữ chạy tiên lục hình, gắn với đối tượng Screen (Form, TextBox, List…) Một số thành viên: l l l Ticker( string ); setString( string ) / getString(); Đặt ticker vào displayable l displayable setTicker( ticker ); Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội 46 Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Lập trình kiểu Canvas l Canvas đối tượng đồ họa hình dạng trừu tượng, phải kế thừa để xử lý đồ họa hàm paint class class_name extends Canvas{ … public void paint(Graphics g){ … } } l Đối tượng vẽ Graphics, J2SE, chứa hàm xử lý vẽ đồ họa tương ứng Lập trình kiểu Canvas l Một số hàm Canvas: l l l l l l repaint(); / repaint( x, y, w, h ); yêu cầu vẽ lại hình setFullScreenMode( boolean ts ); đặt chế độ tồn hình getKeyCode( ga ); lấy mã phím từ hành động getGameAction( kc ); lấy hành động phím từ mã phím hasPointerEvents(); cho biết có cung cấp xử lý bút trỏ Xử lý kiện Canvas: cần lập trình hàm l l l l l l keyPressed( int kc ); keyRepeated( int kc ); keyReleased( int kc ); pointerPressed( int x, int y ); pointerReleased( int x, int y ); pointerDragged( int x, int y ); Lập trình kiểu Canvas l Một số hành động phím mã phím getGameAction( L ) key code KEY_NUM0, KEY_NUM1, , KEY_NUM9, KEY_STAR (*), KEY_POUND (#) n key action UP, DOWN, LEFT, RIGHT, FIRE, GAME_A÷GAME_D getKeyCode( J ) Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội 47 Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 Lập trình kiểu Canvas l GameCanvas lớp dẫn xuất từ Canvas, xử lý đồ họa ứng dụng trò chơi, với số thành viên: GameCanvas( boolean supressKeyEvent ); flushGraphics(); đẩy kết đồ họa lên hình, xóa đồ họa cũ trước l getGraphics(); lấy đối tượng vẽ, phải gọi repaint sau l getKeyStates(); lấy trạng thái phím, xác định phím (getKeyState()&LEFT_PRESSED!=0) l paint( Graphics g); @Định nghĩa mã phím nhấn: LEFT / DOWN / RIGHT / UP / FIRE / GAME_A / GAME_B / GAME_C / GAME_D _PRESSED l l Lập trình kiểu Canvas l Cơ chế xử lý đồ họa GameCanvas GameCanvas getGraphics() paint() extended canvas (1) (1) paint the graphic objects to Display repaint() Graphic object Graphic object (3) (2) (2) call repaint() Một số đối tượng khác l Image: đối tượng ảnh để xử lý đồ họa (xác định form) l l l l l l ÿ = createImage( “/imageNameOfResource” ); :.drawImage(ÿ, x,y, anchor); {anchor=LEFT,TOP,HCENTER…} :.drawRegion(ÿ, xSrc,ySrc, w,h, transf, xDst,yDst, anchor); ÿ.getRGB( rgb[], offset, scanlength, x,y, w,h ); ÿ = createRGBImage( rgb[], w,h, alpha ); :.drawRGB(rgb[], offset, scanlength, x,y,w,h, alpha); rgb: mảng int[] liệu ảnh, điểm ảnh gồm α.r.g.b (α=0 transparent) byte alpha l offset: vị trí bắt đầu in mảng rgb Không suốt l scanlength: độ lớn dòng ảnh (bằng độ rộng ảnh) Nửa suốt quy hay không (true/false) l alpha: rgb[i] &= 0x77FFFFFF Hoàn toàn suốtđịnh in ảnh suốt theo alpha l rgb[i] &= 0x00FFFFFF Biên soạn: GV Dương Thăng Long, Khoa Công nghệ Tin học - Viện Đại học Mở Hà Nội 48 Tài liệu học tập dành cho sinh viên - Lập trình Java (longhlk@gmail.com) 04/08/2009 E Vẽ ảnh suốt e(?) eateImag Image (? GB tR ge (1) ) Image.cr (2) ,.png ) rgb Pixel ).getWidth() * ).getHeight() (3) for( int tg=rgb[0],i=0; i