1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu về uml ngôn ngữ mô hình hóa thống nhất để phân tích và thiết kế hệ thống thông tin quản lý t 4 ngôn ngữ java và lập trình hướng đối tượng

78 1 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

CNT OS ISS far ỦY BAN NHÂN DÂN TP HO CHi MINH SỞ KHOA HỌC CÔNG NGHỆ VÀ MÔI TRƯỜNG —oOo— Dé tae: " NGHIÊN CỨU VỀ UML (NGÔN NGỮ MƠ HÌNH HĨA THỐNG NHẤT) ĐỂ PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG THƠNG TIN QUẢN LÝ Tập 4: Ngơn ngữ Java lập trình hướng đối tượng Chủ nhiệm đề tài: Trần Văn Lăng Cơ quan chủ trì: Phân Viện CNTT Tp.HCM - Tp Hồ Chí Minh — 6/2000 - Sé Khoa kpc Ging nght ud Wat trates Tp HOU Tt HEM Pa thuận GUT? Muc luc Chương 1: Gidi thiéu vé ng6n ngit Java sssccssseessssecsssnnecssssseesssssseccnnsecssssesssseeessenseesnieeeetee 1 Ngôn ngữ Java Giới thiệu IDK Chương trình Java đơn giản 3.1 Chương trình Wing dung (stand-alone application) 3.2 Chuong trinh ky sinh (applet program) Dấu hiệu Java 4.1 Dinh danh (identifiers 4.2 Tit khéa (keywords) 4.3 Hang (literal 4.4 Phép toán 4.5 Dấu phân cách (separator) Kiểu đữ liệu Java Cấu trúc điều khiển, Tạo đối tượng Phương thức hủy bỏ Kếtluận Chương 2: Lớp đối tượng Phương pháp luận hướng đối tượng (Object-Oriented Methodology) Xây dựng lớp Phương thức thiết lập Một số bổ từ 6.1 Hình thức truy cập 6.2 Bổ từ static 6.3 Một số bổ từ Kết luận Chương 3: Sự thừa kế tính đa hình Sự thừa kế Lớp trừu tượn Giao dién (interface) Tinh da hinh Khái niệm gói (package Kết Chương 4: Các Các luận Lập trình với AWT lớp AWT lớp thành phẩ 2.1 Các widget đơn giản (simple widgets) 2.1.1 Lép Label 2.12 Lớp Butto 2.1.3 Lop List 2.1.4 Lép Choice 2.1.5 Lép Checkbox St Khoa hee Cing ught on Tht trsing Tn HOU Phin Vien CUT? Ue HOM 2.1.6 Lép Scrollbar 2.2 Thanh phan xử lý văn ban (Text Components) 2.2.1 Lép TextField 2.2.2 Lép TextArea 2.3 Container 2.3.1 Lép Panel 2.3.2 Lớp ScrollPane 2.3.3 Lớp Window 2.4 Lép Canvas va cdc vin dé vé dé hoa (Graphics Context Các lớp bố trí (layowi) 3.1 Lép FlowLayout 3.2 Lớp BorderLayout 3.3 Lép CardLayout 3.4 Lớp GridLayout 3.5 Lớp GridBagLayou Các lớp hỗ trợ giao diện Kết luận Tài liệu tham khảo ©@@©@©©@@@@@©@@©@@@@@©@@@@@@@@©G@@@@@@@@©@@@@@@@@@@@© “Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language" - JavaSoft @@®@@®@®@@@@@®@@@@®@8&@@@®@@@@@@®@@@@8@&@@@®8®@8@®®@®@&@ it Sé Kboa hee Cing ugh ua Whit tracing Tp HOM Phan Vin CUTT Te HOM Lời nói đầu Ngơn ngữ mơ hình hóa thống UML - Unjield Modeling Language - giới tâm năm gân đây, nhằm đưa công cụ thống giúp cho trình phân tích thiết kế hệ thống thơng tin thuận tiện xác Các sản phẩm UML thương mại hố có nhiều Intemet, UML đưa vào sở đụng phổ biến để án phần mềm Ngay số tài liệu biên soạn giới thiệu ngôn ngữ lập trình hướng đối tượng - C++, Java; số môi trường phát triển phần mềm - Visual C++, đưa UML vào để minh họa hổ trợ trình lập trình Trong nước, số sở nghiên cứu Viện CNTT, Phân Viện CNTT Tp.HCM (PVCNTT) tổ chức biên địch, biên soạn tài liệu trợ giúp cho trình phân tích thiết kế hệ thống Tuy nhiên, tài liệu chưa đưa công nghệ UML vào để minh họa mơ hình hóa Trong hầu hết công ty, sở làm phần mễm Việt nam, UML chưa áp dụng rộng rãi Xuất phát từ yếu tố trên, PVCNTT đăng ký với Sở Khoa học Công nghệ Môi trường Tp Hồ Chí Minh (Sở KHCNMT), để tài "Nghiên cứu UML để phân tích thiết kế hệ thống thông tin quản lý" Dé tài Hội đồng xét duyệt thơng qua ngày 06/11/1998 với nội dung sau đây: « Nghiên cứu biên soạn tài liệu UML + Xây dựng ví dụ mẫu ứng dụng nghiên cứu » Mở lớp tập huấn chuyển giao kết qủa nghiên cứu Trên sở kết luận Hội đổng, Sở KHCNMT ký với PVCNTT hợp đồng số 104/1998/HĐ-KHCN ngày 10/11/1998, để thực để tài thực giai đoạn: « Giai đoạn (từ 12/1998 đến 6/1999): nhóm nghiên cứu đưa tài liệu hướng dẫn ngữ nghĩa ký pháp UML để sử dụng cho lớp tập huấn + Giai đoạn (từ 7/1999 đến 11/1999): với hệ thống mơ hình mẫu, mơ hình hóa q trình hoạt động hệ thống, sinh mã chương trình, tổ chức lớp tập huấn, viết báo cáo tổng kết, nghiệm thu Ngày 02/7/1999, Sở KHCNMT thành lập Hội đồng Giám định để đánh giá kết để tài giai đoạn Hội đẳng đến kết luận với khuyến cáo: + Hoàn chỉnh tài liệu, cần đưa vào nghiên cứu toán ứng dụng thực tiễn « Đồng ý cho để tài kéo dài thêm tháng « Kết hợp với Trung tâm Phát triển Cơng nghệ Thông tin để tổ chức lớp tập huấn sử dung UML Trên sở khuyến cáo góp ý thành vién H6i déng Gidm dinh, biên soạn lại tài liệu, cho đáp ứng yêu cầu lớp tập huấn, bảo đầm nội dung Hội đồng xét duyệt Giám định nêu Báo cáo kết thức dé tài bao gồm tập: « Tập 1: UML việc mơ hình hóa hệ thống thơng tin ti St Khoa đạc Ciug ught wd Mit trudng Tp AOU Phin Vein CRTT Te BOM « Tập 2: Một số case-study sử dụngUML (hệ quản lý thư viện, hệ quản lý nhà kho, hệ quản lý container, hệ quản lý kết toán thống kê sản lượng, hệ quân lý trợ giúp điều độ) « Tập 3: Tài liệu hướng dẫn sử dụng Rational Rose + Tập 4: Ngôn ngữ Java lập trình hướng đối tượng Về phần tài liệu sử dụng, trình tìm hiểu UML thực để tài "Nghiên cứu UML để phân tích thiết kế hệ thống thơng tin qn lý" Sở Khoa học Công nghệ Môi trường Tp Hê Chí Minh quản lý, chúng tơi định chọn tài liéu UML Toolkit cha hai t4c sủa Tava để sinh gid Hans-Erik Eriksson, Magnus có nhiều mơ hình áp dụng Đặc ngơn ngữ để minh họa, điểu nầy mã chương trình cho ví dụ Penker [EM98} để biên dịch Đây tài liệu sáng biệt, tài liệu UAƒL Toolkit tác giả chọn phù hợp với nhóm thực đề tài chọn lựa Java mẫu minh họa Riêng tài liệu sử dụng báo cáo giai đoạn để tài, biên dịch từ nguồn tài liệu gốc có địa _http:/www.rational.com/um] - nguồn tài liệu gốc khó lột tả nét để hiểu UML Bởi tác giả viết với chủ đích dành cho người am biểu phương pháp mô hình hóa trước đây, lại sử dụng thân cú pháp UML để mơ tả Chính vậy, chúng tơi khơng sử dụng tài liệu có địa nêu trên, để xây dựng tư liệu phục vụ cho việc trang bị kiến thức UML phân tích thiết kế hệ thống Các tài hiệu biên soạn sử dụng cho lớp tập huấn Trung tâm Phát triển Công nghệ Thông tin Đại học Quốc gia Tp Hỗ Chí Minh, đành cho chuyên viên bậc cao Công nghệ Thông tin Sé Khon bee Ging ught ud Mit traing Tp WOU Phin Vien OUTT Te HOM DANH SACH THANH VIEN THAM GIA BIEN SOAN VÀ HIỆU BÍNH BÁO CÁO KẾT THÚC ĐỀ TÀI Tài liệu biên soạn hiệu đính nhóm thành viên sau đây: Tap 1: GML va việc mơ hình hóa hệ thống thơng tin Biên soạn: KS Lê Phước Lộc TS Trần Văn Lăng Hiệu đính: KS Nguyễn Đức Cường KS Võ Nguyễn Anh Thơ CN Trần Đông Hiếu Tập 2: Một số case-study sử đụng UML Biên soạn: KS Võ Nguyễn Anh Thơ CN Trần Đông Hiếu KS Lê Phước Lộc Hiệu đính: TS Trần Văn Lăng CN Trần Bá Tuyến CN Trần Đình Thảo Tập 3: Tài liệu hướng dẫn sử dụng Rational Rose Biên soạn: CN Trần Đơng Hiếu Hiệu đính: TS Trần Văn Lăng KS Lê Phước Lộc KS Võ Nguyễn Anh Thơ 'Tập 4: Ngơn ngữ Java lập trình hướng đối tượng Biên soạn: TS Trần Văn Lăng Hiệu đính: KS Võ Nguyễn Anh Thơ KS Lê Phước Lộc CN Trần Đông Hiếu St Kian hae Ging ught vc Mat tudng Tp HOM Noe Dhan Veen ONT? Tp WOM Loi cam on Nhóm thực để tài xin chân thành cảm ơn: « Sở Khoa học Công nghệ Môi trường Tp.Hồ Chí Minh tạo điều kiện, cung cấp kinh phí để đề tài thực + Ong Tran Dinh Phú, Phó Giám đốc Sở KHCNMT theo dõi, cổ vũ để để tài thực biện kế hoạch tiến độ „ Ông Đỗ Tường Trị, Th$ Phan Thu Nga, Trưởng Phó Phịng KHCNMT, giúp đỡ tạo điều kiện để để tài hoàn thành Quản lý KHCN - Sở - ThS Võ Thùy Linh, Trưởng Phòng KHTV - Sở KHCNMT, giúp đỡ hướng dẫn để để tài thực theo nguyên tắc quản lý tài -GS, Nguyễn Hữu Anh, TS Phan Thị Tươi, GS Hồng Kiếm - Chủ tịch, PHó Chủ tịch - thành viên Hội đồng Xét duyệt, Hội đồng Giám định, đưa khuyến cáo bổ ích để để tài có định hướng trong trình thực ĂẲPGS Trần Thành Trai, Chủ nhiệm chương trình Cơng nghệ KHCNMT, phê duyệt để để tài chấp nhận thực Thông tin Sở Ơng Nguyễn Đức Tích, Phụ trách Phân Viện Cơng nghệ Thông tin Tp HCM, tạo điều kiện, có động viên chân tình để dé tài hoàn thành » Hai tác giả Hans-Erik Eriksson Magnus Penker biên soạn tài liệu UML Toolkit, mà sử dụng để biên dịch « Những sinh viên cộng tác với để tài giai đoạn 1, thơng qua thay hướng dẫn thành viên để tài!, Bên cạnh đó, chúng tơi xin chân thành cảm ơn Giáo sư, Tiến sĩ đầu ngành lĩnh vực CNTT có động viên cổ vũ trực tiếp gián tiếp để để tài hồn thành Và qua chúng tơi xin chân thành gởi lời cảm ơn đến bè bạn, đồng nghiệp Phân Viện CNTT Tp.HCM, Viện CNTT có động viên quý báu tỉnh thần t Những kết có nhóm này, không đưa vào báo cáo cuối để tài, biên soạn gặp số sai sót, vi St Khoa hac Chug ugh a Wit trang Tp WOM Phin Vien CUTT Tp ROU Giới thiệu tài liệu ''Java ngôn ngữ lập trình hướng đối tượng" Tài liệu “Java ngơn ngữ lập trình hướng đối tượng" nằm bao gỗm tập báo cáo kết thúc để tài "Nghiên cứu UML (ngơn ngũ mơ hành hóa thống nhất) để phân tích thiết kế hệ thống thơng tìn quân lý" Tài liệu bao gồm chương, trình bày vấn để ngôn ngữ lập trình Ïava, cách lập trình hướng đối tượng Java giao diện đồ họa sử dụng Java thông qua AWT (Abstract Window Toolkit) + Chương 1: Giới thiệu ngôn ngữ Java + Chương 2: Lớp đối tượng « Chương 3: Sự thừa kế va tính đa hình « Chương 4: Lập trình với AWT vii Sk Khoa hse Ging ught ui WA tusing Ys HOM Phin Vien OUT? Tp HOM Chương 1: Giới thiệu ngôn ngữ Java Ngôn ngữ Java Trong năm gần với phát triển Internet, phương pháp luận lập trình hướng đối tượng, ngơn ngữ Java nhắc đến nhiều để án Tin học Có thể nói Java ngơn ngữ lập trình hướng đối tượng phát triển hãng Sun Microsystems làm nỗi bật sức mạnh Internet (Java is an OOP language developed by Sun Microsystems that plays to the strengths of the Internet) Dé nhin lại, xem qua xuất xứ trình hình thành ngơn ngữ Có thể coi lịch sử Java bắt đầu từ'4/1991, nhóm nhà lập trình Microsystems chuyển đến đại lộ Sand Hill để thực để án với tên gọi Green nhằm đưa kỹ thuật Tin học vào thiết bị điện tử thương mại đột phá kỹ thuật, qua trì tốc độ phát triển lợi nhuận Sun để án nẩy, nhận định "cẩn phải phát triển khơng suy thối" hãng Sun Green Để án cần phát triển Lãnh đạo Green Team James Gosling định cần phải có ngơn ngữ lập trình thỏa tính uyển chun (portability), ngơn ngữ C++ tổ uyển chuyển chưa đáp ứng mức tính portability Tính portability phải thỏa mãn khơng phía mã nguồn chương trình mà cịn với xử lý Trong khí đó, thiết bị điện tử thương mại có xử lý khác vịng đời chứng khơng dài Nếu sử dụng ngôn ngữ C++, gặp xử lý cẩn phải thay đổi chương trình dịch, biên dịch lại chương trình Ngồi C++ ngôn ngữ phức tạp muốn nhiều thứ bên nó! Tháng 8/1991, J Gosling thiết kế ngôn ngữ đặt tên Oak (cây sơi) Ơng ta giải thích cách đặt tên ngơn ngữ sổi trình đưa vào cấu trúc thư mục cho ngôn ngữ mới, ông ta nhìn qua sổ phịng làm việc Ban đầu Oak khơng quan tâm đến nhiều lắm, chí có người cịn giải thích Oak tên chữ cãi cụm từ "Object Application Kernel" ma khéng dém xia gi đến cay cối cd Khodng mita Xuan 1994, Bill Joy va Eric Schmidt (những người sáng lập lãnh đạo Sun) hoạch định sách thương mại liên quan đến Internet, Oak ý dén J Gosling số nghiệp âm thâm làm việc để đưa Oak đến với Internet gần năm trời Tháng Giêng năm 1995, Oak đổi thành tên Java, tên xứ sở Indonesia có giống café nỗi tiếng mà người Green Team thường hay uống Hơn Oak trùng với tên sản phẩm thương mại đăng ký Ngày23/5/1995, Java Sun cơng bố thức Sun World'95 Tính Java máy thực uyển chuyển ngơn ngữ lava chương trình biên dịch tạo mã byte (bytecodes) (tập tin có tên quy ước với phẫn mở rộng class) mà không phụ thuộc hệ thống sử dụng (Hình 1) Mã bytecode tập hợp câu lệnh tương tự lệnh mã ứnachine code) tạo chương trình biên dịch Sự khác mã máy hệ thống máy tính mà biên dịch, ma bytecode c6 thé thực ! Chính mà Java mô tả "C++ minus" Nokien cise ub UML tf phin tich oa chit bi be thing thing cóx geảx (ý Chuang t: Get thita vd ngin ug fava hién trén bat ky hệ thống máy tính có trang bị để điều khiển chương trình Java Tinh uyển chuyển nây làm tăng khả tái sử đụng lớp dạng bytecodes tạo ra’, Java trén Java trén x86/Win32 x86/Win32 Chương trình nguồn Java (* java) Ma bytecode Java Spare/Solaris Java " (*.class) Java Spare/Solaris Java trén Java trén x86/Linux x86/Linux Chương trình biên địch Java Chương trình thơng dịch Java Hình Tinh uyén chuyển Java Giới thiệu JDK IDK Java Java trình khác v.v trình (Java Development Kit) 14 cong cu trén dịng lệnh sử đụng để tạo chương hãng Sun Microsystems Có thé dùng để biên dịch, thực thi chương trình viết (chương trình Java tập tin văn có phan mở rộng java) số chương đỗ họa tiện ích khác đủ cho người lập trình thiết kế chương trình giao diện MacOS, JDK có hệ điểu hành khác Windows, Linux, Solaris, thơng Có hai chương trình thường dùng, trình biên dich javac trình dịch java Khi cần dịch chương trình viết Java $ javac file.java Sau biên dịch tập tin file.java trình sử dụng, $ java tap tin file.class, dé thực thi chương file Hoặc sử dung tap tin file html $ appletviewer file html Lưu ý: để thật sử Tim Berbers-Lee, người sáng tạo World Wide Web, nói "Giờ có lý dụng lập trình hướng đối tượng” Hội nghị JavaOne ương3: Sig thie hi vi tinh da hink Uoghion cau ué UNDA at phn vich vd tÁdết €ế he thing thing tin yudn tý a ){ ( int i = iner; i = incr && temp.compareTo(a[(j - Comparable[] public static void shellsort( int n = a.length; int incr =n / 2; while (incr >= 1){ for a[j] j -= a[j] = } } iner = a(j - incr; incr]; incr]) < ){ temp; /= 2; } class Employee private extends String private Comparable{ name; double coeffSalary; private double salary; private GregorianCalendar beginDate; public Employee( String n, double c, name = n; coeffSalary } " beginDate = = b; numbersYear() } public int + + name " nam" }; luong: ", salary "+ numbersYear(){ return new GregorianCalendar().get (Calendar.YEAR) beginDate.get( Calendar.YEAR ) + 1; } public void Salary = monthlySalary( double coeffSalary*180000* (2 + public int compareTo( Comparable Employee eb = (Employee)b; if (salary < eb.salary) return if (salary > eb.salary) return b } return b ){ C¿¡ public void print () { System.out.println{ + GregorianCalendar percent + ", lam duoc — }{ percent/100); ){ -1; 1; 0; } Tran Thuy Tran Van Anh Quynh, luong: 325800.0, Tran Thuy Thuc Trinh, luong: 387000.0, Le Thi Binh Minh, luong: 583200.0, lam Lang, luong: 743400.0, lam lam duoc nam lam duoc nam duoc 38 nam duoc 41 nam Giao dién (interface) Với lớp Employee nhu trên, để sử dụng SortAlgorithms lớp EmployeeTest, 56 hanh vi sheilsort() lớp hành vi nây phải hàm lớp Trường hợp Nghiin cite ub UML dé phin tich wi thitt bb ke thing thing tin qudn đệ muốn sử dụng shellSort() Chuang 3: Suc chita bé ud tink da hink thành viên lớp, phải xây dựng lớp Employee, ngoai viéc kế thừa từ lớp Comparable, cịn phải kế thừa thêm lớp §ortAlgorithms Xuất phát từ việc: Java khơng có thừa kế bơi (mulriple inheritance) - lớp có lớp cha Chính người ta đưa vào khái niệm interface việc thiết kế, để qua cho phép người lập trình giải yêu cầu đặt giới thực Với chương trình trên, lớp Employee cải tiến thành lớp Employee_n để đáp ứng yêu cầu đặt sau (#fình 2): SortAlgorithms ¡ Nerd x Comparable Pao Employee_n Hinh class Employeen private private extends String double SortAlgorithms name; coeffSalary; private double salary; private GregorianCalendar public Employee_n{ String name = n; coeffSalary } beginDate public "+ void = = b; Comparable{ GregorianCalendar b ){ c; print(){ System.out.println( } beginDate; n, double c, implements numbersYear() name + " nam" + ); ", luong: " + salary public int numbersYear () { return new GregorianCalendar().get(Calendar.YEAR) beginDate.get( Calendar YEAR } ) + 1; + ", lam duoc - public void monthlySalary( double percent){ salary = coeffSalary*180000*(1 + percent/100); } public int compareTo( if (salary Employee_n if (salary return 0; eb = Object < eb.salary) > b){ (Employee _n)b; eb.salary) return return -1; 1; } Lớp Employee_n nây vừa kế thừa lớp SortAlgorithms vừa cung cấp hành động (ứnplement) phương thức compareTo(Object b) để so sánh hai đối tượng Phương thức nây mô tả dấu hiệu (signztzre) giao diện (interface) : Comparable 57 22A Cheung 3: Sey thiza vd tinh da, tiiah csira ub UML dé phin tick sà thite hi he thing thing tin qudn ty interface } Comparable{ public int compareTo( Object b ); lớp SortAlgorithms có thay đổi, hành vi hàm đối tượng, nên lớp EmployeeTest_n truy cập thông qua đối tượng sta££ [0] class SortAlgorithms{ public void shellSort( Comparable[] int n = a.length; int incr =n / 2; while (iner >= 1){ for ( int i = incr; i = alj] j } a[j] } } incr } public int for = tmp; /= 2; void incr; for && ){ tmp.compareTo(a({j - incr]; exchangeSort( n = a.length; (int i = 0; i if } -= incr = a(j it+ a}{ ( int j = itl; ali] a[j] = aljl]i = tmp; < n-1; Comparable[] it+ j < nz incr}) < ){ a){ ) j++ ( a[i].compareTo(a[j]) > Comparable tmp = a[i]; - 9Ø )( } class EmployeeTest n{ public void main( Employee_n[] String[] staff = new args ){ Employee _n[4]; new 3.24, n( "Le Thí Binh Minh", = new Employee staff[0] GregorianCalendar (1963,6,21) ); new 4.13, "Tran Van Lang", = new Employee_n( staff(1] GregorianCalendar (1959,12,18) }; 2.15, "Tran Thuy Thuc Trinh", = new Employee_n( staff[2] GregorianCalendar (1993,9,17) }; = new Employee_n( “Tran Thuy staff[3] GregorianCalendar (1999,3,14) ); int i; for( i = 0; i < staff.length; i++ staff[i}].monthlySalary (0.0); staf£[0].exchangeSort( staff ); for( i = 0; i < staff.length; i++ staf£[i].print(); 58 ) Anh Quynh", 1.81, new new Ughitn cian ob UML tf phim tich wi táuết ÁE Áệ tÁẩtg thing tin gudn „xe 8: Sự Lăn để dà tinh da hin Những người thiết kế Java đưa vào khái niệm interface để cài đặt lớp thay cho cách ding class truyén thống, cách để biện cho việc giải thừa kế ảo (virtual inheritance) có ngôn ngữ khác” Một interface - tạm coi già điện - dùng để mơ tả dấu hiệu hành vi trừu tượng (abstract functions) va cdc biến lớp (static final variables)” Va giao điên thừa kế nhiều giao điên khác (cũng thừa kế bội) Để chương trình làm việc được, chứng ta phải xây đựng lớp, đó, lớp phải cung cấp hành động (các câu lệnh) cho hành vi mô tả giao diện thông qua từ khóa implements Java giải thừa kế bội lớp thông qua việc implements “bội” thay cho việc extends "bội" Chẳng hạn, với việc quản lý đối tượng trường Đại học có đào tạo bậc Tiến sĩ, có giáo viên cần phải tham gia loại hình đào tạo (được đưa vào lớp PhDStudent) Như Hinh interface ff } interface + I class I Vlas Pupil { Teacher PhDStudent { implements Teacher, Pupil{ Pupil Teacher » J ` „ PhDStudent Hinh Ngoài ra, giao diện thừa kế (extends) nhiên, giao diện khơng thể thừa kế từ lớp Chẳng từ nhiều giao diện khác - đương hạn, thay PhDStudent, thiết kế giao diện PhDStudentInter Pupil va Teacher interface } fle PhDStudentInter extends Teacher, cho s9 tạo lớp thừa kế từ hai giao điện Pupil{ ” Chdag hạn, ngôn ngữ C++, mà không bàn đến hay ho hay thấp ?! có thứ việc Churng B: Sug théce bE va tink de tink Nghiin ere vd UML dé phn tich ud thitt bi he thing thing tin yudn ty Sau cung cấp hành vi (implements) cia giao diện nầy thông qua việc xây đựng lớp PhDStudent sau (Hình 4): Pupil Teacher ⁄ A PhDStudentinter A —— PhDStudent| L —————` Hình class Views } implements PhDStudent PhDStudentInter{ Chính vậy, xây dựng lớp sau từ giao điện chung quản lý người Trường Đại học (Hình 5) interface ffa } interface /fe } interface } Vheee class } Jie class } Vane class } Person{ Pupil extends Teacher Professor // + extends Person{ implements PhDStudent Student Person{ Teacher{ implements implements Teacher, Pupil{ 60 Pupil{ Vighito cise ud ULL ti phn tich wa théde hE he thing thing tin qudn ty Ghearng 3: Sec chive để cà tink da binh Person NN Pupil ‹4f Student Teacher ầ f PhDStudent N Professor E————] Hình Luu ý: Như vậy, có khác lớp trừu tượng (abstract: class) giao điện (interface) »_ + Lớp trừu tượng lớp, giao diện khơng phải lớp, nên khơng thể có hành động phương thức thuộc giao điện (phân thân phương thức) Mọi hành vi mô tả giao điện hành vi trừu tượng (dạng public abtract) Trong đó, lớp trờu tượng lớp có hành vi trừu tượng «_ Mọi biến giao diện có ý nghĩa biến lớp hing (cé dang public static - final) Chúng ta cung cấp hành động (cài đặt) cho lớp trừu tượng implements ti giao diện, cung cấp hành động cho giao diện imp1ements hay excends từ lớp trừu tượng??, Tính đa hình Như biết việc lập trình hướng đối tượng, tính đa hình cho ta kết khác dựa u cầu Với tính đa hình ngôn ngữ hướng đối tượng, không cần cấu trúc điểu kiện muốn tác động lên đối tượng khác Nói cách khác, thơng điệp gởi mà không cần quan tâm đối tượng nhận thuộc lớp nào” Cũng với lớp Car, CarTnherit, CarNewTnherit chí lớp Truck hình trên, sử dụng hành vi thongBao () có kết khác vào đối tượng !/Ú11/111//// Car.3ava !!/J//1//1//1/1 ?? Điều khơng cho lớp trữu tượng mà cho lớp nói chung ?* Cấp cẩn gởi thông điệp "cứ nghe!" cho nhiều trường hợp tiếp xúc với cấp mà không cẩn quan tâm cấp đưới làm việc 61 CheamgB: Sup thite bE vd tink da tink Unhiin cine ub UWL dé phin tich ud thitt bi hp thing thing tin gude ty class Car{ String hang; String mauXe; boolean noMay; void if khoiDongMay () { ( noMay == true ) System.out.println( else { noMay = true; thongBao () { System.out.print( if da no may, hay vao so de chay" ) System.out.printin( } } void "Xe "Xe { noMay == true ) System.out.printin( else System.out.printin( "Vua moi no + mauXe mau " ", may ", hien dang may may + xong" ); " hang no" da cua " + hang); ); tat may" ); } ///1///117// CarInherit.java //////// class CarInherit extends Car( int soNguoi; void choThemNguoi () { if ( soNguoi == ) System.out.println( "Khong soNguoit+; System.out.println( "So else{ the nguoi cho bay them" gio ///11/11// CarNewInherit.lava //////4// class CarNewInherit extends CarInherit{ int soMay; void sangSo(){ if ( soMay == }{ "Giam so de chay System.out.println( } } nguoi” "+soNguoit+" lai" cham }; soMay ; else{ soMay++; } la ); System.out.printin( "Xe dang chay voi so " + soMay void thongBao () { "Xe mau " + mauXe + " cua hang " System.out.print( if { noMay == true ) System.out.printin( ", may dang no" ); else System.out.println( “, hien may da tat may" ); "Co ” + soNguoi + " nguoi tren System.out.println( System.out.println( "Xe dang o so " + soMay )¿ _62 + } hang xe” }¿¡ de Ughitn cia ub UMA dd phim tich ui tiết hi hf thing thing tin guảu (ý } //11111//1/// Truck.java class Truck extends Car{ String void } } //011/11111/011//0 choCaiGi; thongBao (} { System.out.print( "Xe mau ” + if ( noMay == true ) System.out.println( ”, may else System.out.println( ", hien System.out.println( "Xe dang /!//1/// CarPolvmorphism.1ava class CarPolymorphism{ public static void main( CarInherit xel.hang = xel.mauXe xel = new "Toyota"; = "Xanh CarNewInherit xe2.hang = xe2.mauXe Truck xe3 xe3.hang = xe3.mauXe la xe2 = "Nau "KIA"; = while = 0; ( i " no" may da cho " + cua hang " }; tat may" choCaiGi ); ); //////////// argv[] CarInherit(); ){ cay”; CarNewInherit (); Truck(); "Xam = objArray i + nhat”; = new xe3.choCaiGi int dang String = new tro"; System.out.print( Car[] mauXe "Peugot"; xe3 khoiDongMay () ; < "Xe "Phan = { thu IIi bon xel, huu xe2, objArray.length System.out.printlin( } ưng 3: Sự (đùa để ua tink da hinh " " ); co"; xe3 }; ){ objArray [i++] thongBao() } Xe thu IIT Xe mau Xanh Xe co mau Nau nguoi Xe Xe mau Xam tro cua hang KIA, dang cho Phan bon huu co Xe dang o Vua moi no la cay cua nhat tren so cua xe may xong hang hang Toyota, Peugot, may hien hien may dang no “Trong ví dụ trên, câu lệnh Car(] objArray = { xel, xe2, 63 xe3 }7 may da da tat tat may may + hang }; uaxg 8+ Sự tàn Áể nà tink ta hinh 2g (hay cứu ub UMA dt phan tich od ehtit KE he thing thing tin gud độ khai báo mảng objArray đối tượng Car để quản lý đối tượng, mảng nẩy tham chiếu đến đối tượng cụ thể vật chifa (container) wong ngôn ngữ hướng đối tượng thông thường khác Mảng objArray mô tả vật chứa đối tượng thuộc lớp Car, nhiên sử dụng để chứa đối tượng thuộc lớp hậu duệ khác Với câu lệnh objArray{itt+].thongBao(); tùy theo đối tượng thông báo khác xuất hình Một câu lệnh thông điệp gởi đi, tùy theo đối tượng thuộc lớp để có kết khác mà không cần cấu trúc điều kiện Ngôn ngữ lava sử đụng chương trình biên dịch javac để tạo mã nhị phân Java, sau sử dụng chương trình thơng dịch java để thực thí chương trình dạng mã nhị phân Java Chính nối kết Java nối kết động (dynamic binding) gọi nối kết trễ (late binding) hay nối kết vào lúc chay (run-time binding) Do khơng cân đến phương thức ảo (wirtual funciions) ngơn ngữ C++ Nói cách khác, Java hành vi phương thức ảo (virtual functions) Để coi hành vi đố phương thức ảo, thêm từ khóa £ina1 phía trước (coi hàm hằng) Sự thừa kế hình thành trình truyền tự nhiên giới thực, từ tạo nên mối quan hệ chặt chẽ lớp Tĩnh đa hình tổn bối cảnh pha hệ gồm nhiều lớp Khi thông điệp chuyển đến cho đòng họ - hệ thống pha hệ - tùy theo đối tượng cụ thể, kết khác đáp ứng Khi thiết kế chương trình tính lương lớp ManagerTest phần I, sử dụng tính đa hình gọi tới hành vi staff[0] lớp Manager monthlySalary () để tính lương cho đối tượng đối tượng staff[1], sta£f[2], sta£f[3] lớp Employee for( i= 0; i < 4; itt) staff(i].monthlySalary (0.0); Trong hai lớp nầy, hành vi tính lương xây dựng theo quy cách khác nhau, nối kết trễ nên đối tượng khác đáp ứng theo cách minh 5, Khái niệm gói (package) “Trong lava khơng có hình thức truy cập £riend C++, để qua cho phép hàm bên can thiệp vào thành viên lớp (hàm £riend lớp), hay lớp truy cập đến thành viên lớp khác mà coi friend (lớp £riend lớp) Tuy nhiên, Java cho phép xây đựng cộng đồng rộng lớn khái niệm friend C++, package (gói) Các lớp gom chung lại với để tạo thành gói, với hình thức truy cập chuẩn (khơng định thêm cả) lớp gói phép truy cập lẫn Gối Java tổ chức thư mục quản lý đĩa, lớp tập tin chứa thư mục Chẳng hạn, với lớp Car, CarInherit, CarNewTnherit 64 Truck hình (ở Ueghtin eiira ub UTA bd phan tick ud thitt bE bb thing thing tin guảu Cheang 3: Sig chica hE wd tinh ta hink phan 1), gom chung lại để gói LangTV cách viết lại lớp nây nhu sau: (1111111111110! package langTV; public class Car{ String hang; String Cay.3ava /////1/1//11// mauXe; boolean noMay; public Car( String hang h¿ mauxe = Tý h, String m ){ da no } public void khoiDongMay () { {f ( noMay == true ) System.out.println( else { noMay = true; System.out.println( } } "Xe "Vua public void thongBao(} { System.out.print( "Xe moi no + mauXe mau " System.out.println( ", may 5ystem.out.printin( ", hien == ( noMay if true } else may, hay may so de hang " xong" + " no" may vao chay” } cua + hang) ); da tat may" }¿ } 111/11/01! CarTnherit.java package langTV; public class CarInherit int soNguoi; public super( } CarInherit( soNguoi public if h, void m Si ); ////////// extends String h, Car{ String m, int s ){ them" }; choThemNguoi () { ( soNguoi == System.out.println( else{ "Khong the cho soNguoi++; System.out.printin("So nguoi”); } } bay gio la " } //111/1//// Truck.java package langTV; public class Truck String public } nguoi choCaiGi; Truck{ extends String super( h, m ); choCaiGi = c; ////////////! h, Car{ String 65 m, String c ){ + soNguoi + ™ ưng 3: Sự tiờu 6B vd tinh da tink Unghiin cine 08 UNL a plan tich ud thidt KE he thing thing ten guda ty public void thongBao(){ System.out.print( } } == ( noMay if true "Xe ) System.out.println( “ “, may //11///// CarNewInherit.lava ); no” dang else ", hien may da System.out.println( "Xe dang cho " + System.out.printin( } soMay = h, m, sm; sn ///////1/1////// soMay ; else{ soMay++; System.out.println( } } public void sn, int sm }{ ); public void sangSo(){ Lf ( soMay == }{ System.out.println( } ); ); tat may" choCaiGi package langTV; public class CarNewInherit extends CarInherit{ int soMay; public CarNewInherit{ String h, String m, int super( ye hang + " hang cua " + mauXe + mau thongBao () { System.out.print( "Xe i£ ( noMay == true ) System.out.println( else "Giam "Xe so dang mau " + ", may de chay chay mauXe dang cham voi so + cua no” " lai" ”" ); + soMay hang " + ); hang }; ); System.out.printin( ", hien may da tat may" System.out.println( "Co " + soNguoi + “ nguoi System.out.println( "Xe dang o so " + soMay ) ) tren xe" ); } Như để xây dựng gói, lệnh thực đưa vào tập tín nguồn chứa lớp package với name name; tên name.ClasseName tên với lớp gói, từ lớp nằm gói name có tên Chang han, với lớp tổ chức lại trên, langTV.Truck langTV.CarInherite, langTV.Car, langTV.CarNewInherit Chinh vị vậy, truy cập đến lớp nây cần phải viết tên đẩy đủ, sử dụng lệnh import thường gặp trước Với lớp CarPolymorphism, ching ta viết lại sau cẩn truy cập lớp gói langTV //////// import class CarPolymorphism.java langTV.*; ////////1///1// CarPolymorphism{ public static void main( String argv[} ){ CarInherit xel = new CarInherit("Toyota”,"Xanh 66 la cay",2); Nohitn wits ub UNL dé phiw tich ud thiit ht 42 thing thing tin guda ly CarNewInherit nhat",2,1); xe2 = new Chuang 3: Sig chine hi ud tinh da kink CarNewinherit ("Peugot", Truck xe3 = new Truck("KIA","Xam tro","Phan System.out.print( "Xe thu III " ); xe3 khoiDongMay () ; Car[] int objArray i = 0; = { xel, xe2, while ( i < objArray.length System.out.println( objArray{it+] thongBao(); xe3 bon "Nau huu co"); }; ) ( } } Thông thường xây dựng lớp, nghĩ đến việc tao thư viện I6p (class library) để sử dụng sau, bên gói chứa tập tin bytecode, tập tin nguồn tập tin sử dụng chứa thư mục khác Trong trường hợp nây phải định biến môi trường CLASSPATH phù hợp” Chẳng hạn, + Thư mục chứa tập tin nguồn Java cẩn đưa vào gói langTV E:\Lang\Java\Source Programs G6i LangTV chứa E: \Lang\Java + » Trong tập tin mã nguồn java cân đưa vào gói langTV có lệnh package langTV Để biên dịch tập tín mã nguồn Java, định đường dẫn đến thư mục gói 1angTV chẳng hạn với lớp Car java sau: javac -d E:\Lang\đava Car java Khi đó, với câu lệnh package langTV Car.java, JDK tự động tạo thư mục langTV thy myc E: \Lang\Java Cac tap tin bytecode class sé duc tao thu muc E: \Lang\Java\langTV Lưu ý rằng, cần phải đặt biến môi trường để truy cập tập tin clLass sau set CLASSPATH=E: \Lang\Java; %JAVA_HOME%\lib\classes.zip JAVA_HOME thư mục chứa cơng cụ hỗ trợ IDK Ngồi yếu tố biến mơi trường, lớp phải cài đặt có hình thức truy cập phù hợp Ở đây, chúng tơi nhắc lại hình thức truy cập để tiện theo dõi + _ Hình thức chuẩn (khơng có từ khóa nào) để cộng đồng gói truy cập đến »_ Hình thức pub1ic để truy cập từ nơi - ngồi gói * cho phép Tava sử dựng tập tin cLass đâu, biến CLASSPATH quy định, thư mục hành khơng có ý nghĩa 67 2fgA25x cễ UNL dd phin tich wa thie bi he thing thing ten qudn (ý ương 5: Sea chive đế bà thnk da hink + Hinh thc protected bao gdm hình thức truy cập chuẩn lớp hậu duệ truy cập -_ Hình thức private mang tính chất riêng tư lớp, thành viên lớp truy cập Riêng lớp, có hai hình thức public hình thức chuẩn Chính vậy, lớp Hình 1, phải thay đổi hình thức truy cập lớp thành viên Với lớp bổ sung thêm hình thức pub1ic, để từ bên ngồi gói truy cập đến - lớp CarPo1 ymorphi sm truy cập Bên cạnh đó, thành viên thongBao (), khoiDongMay () phương thức thiết lập có thêm bổ từ pub1 1c, tất truy cập từ ngồi gói Trong ví dụ nây, liệu thành viên có hình thức truy cập chuẩn, nên khơng thể truy cập đến từ ngồi gói (khơng giống ví dụ đầu chương) VÀ vậy, cần có phương thức thiết lập mang hình thức pub1ic để trao đổi liệu với thành viên nây Chúng ta xây dựng gói chứa gói, giống thư mục chứa thư mục khác Chẳng hạn, để xây dựng gói car gói langTV, tập tin tương ứng viết lại sau: 1111111111111! Car.java //////111////1 package langTV.car; public class Car{ Thos } !//11///// CarTnherit.java package langTV.car; public class CarInherit / « } ///1/////// Truck.3ava extends //⁄

Ngày đăng: 06/10/2023, 12:08

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN