Phần 2 Bài giảng Lập trình hướng đối tượng do ThS. Nguyễn Mạnh Sơn biên soạn gồm nội dung chương 6 - Lập trình giao diện trên Java, chương 7 - Thư viện các Collection và áp dụng. Tài liệu này được viết nhằm phục vụ môn học “Lập trình hướng đối tượng” giảng dạy tiếp theo sau môn học Ngôn ngữ lập trình C++ và như vậy khi học môn học này sinh viên sẽ dễ nắm bắt được những đặc trưng khác biệt của ngôn ngữ Java so với C++.
CHƯƠNG LẬP TRÌNH GIAO DIỆN TRÊN JAVA Nội dung chương tập trung trình bày vấn đề liên quan đến lập trình giao diện, với hỗ trợ số đối tượng cung cấp sẵn Java: Lập trình giao diện với đối tượng với đối tượng multimedia Lập trình giao diện với HTML&Applet Lập trình giao diện với SWING 6.1 GIAO DIỆN VỚI CÁC ĐỐI TƯỢNG CƠ BẢN Trong mục này, tìm hiểu sử dụng đối tượng lập trình giao diện Java: Các đối tượng khung chứa (container) bản: Frame, Panel, Dialog Các đối tượng thành phần (component) bản: Button, Label, TextField, TextArea IT Các kiện đối tượng Muốn sử dụng đối tượng này, cần thêm lệnh sử dụng thư viện awt Java: import java.awt.*; T 6.1.1 Các đối tượng container add(Object): P Các đối tượng container dùng để chứa đối tượng thành phần khác Các lớp đối tượng có số phương thức chung sau: Thêm đối tượng (kiểu component) vào container remove(Object): Loại bỏ đối tượng khỏi container removeAll(): Loại bỏ tất đối tượng mà container chứa getComponent(int): Trả đối tượng thành phần có số tham số đầu vào Container quản lí đối tượng chứa dạng mảng Chỉ số thành phần số thứ tự thành phần thêm vào container getComponents(): Trả mảng tất đối tượng mà container chứa countComponents(): Trả số lượng đối tượng mà container chứa Frame Frame đối tượng dùng cách độc lập, gắn vào đối tượng khác đối tượng conponent bình thường Thơng thường, Frame dùng cửa sổ chương trình độc lập Các phương thức lớp Frame: Frame(): Khởi tạo không tham số 135 Frame(String): Khởi tạo với tham số dòng tiêu đề frame setSize(int, int): Định kích cỡ frame, tham số tương ứng chiều rộng chiều cao frame setVisible(boolean): Cho phép frame xuất hay ẩn hình setTitle(String)/getTitle(): Truy nhập thuộc tính dịng tiêu đề frame setResizable(boolean): Thiết lập thuộc tính cho phép thay đổi kích cỡ frame setIconImage(Image): Thiết lập ảnh icon góc (biểu tượng) frame Chương trình 6.1 minh hoạ việc sử dụng đối tượng lớp Frame Chương trình 6.1 package vidu.chuong6; import java.awt.*; public class FrameDemo{ public static void main(String[] args) { IT // Khai báo khởi tạo frame có tiêu đề Frame myFrame = new Frame(“This is my Frame!”); // Định kích cỡ frame myFrame.setVisible(true); // Hiển thị frame } P } T myFrame.setSize(300,150); Hình 6.1: Kết demo Frame Panel Panel dang khung chứa, đơn giản Panel dùng để nhóm đối tượng giao diện với Thông thường, panel dùng cửa sổ Frame ứng dụng khác Các phương thức lớp Panel, phương thức chung container: Panel(): Khởi tạo khơng tham số Chương trình 6.2 minh hoạ việc sử dụng Panel Frame Chương trình 6.2 136 package vidu.chuong6; import java.awt.*; public class PanelDemo{ public static void main(String[] args) { // Khai báo khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has a panel!”); myFrame.setSize(300,150); // Định kích cỡ frame Panel myPanel = new Panel();// Khai báo panel myFrame.add(myPanel); // Thêm panel vào frame myFrame.setVisible(true); // Hiển thị frame } IT } Hình 6.2: Kết demo Panel Dialog T Dialog đối tượng cửa sổ cửa sổ chương trình Do vậy, Dialog sử dụng kèm với Frame Có hai dạng Dialog: P Modal: Khi sổ dialog, cửa sổ khác chương trình bị khố lại, khơng thao tác được, thao tác cửa sổ dialog Non-modal: Khơng khố cửa sổ khác Khi dialog xuất hiện, người dùng chuyển sang thao tác cửa sổ khác, cần Các phương thức lớp Dialog: Dialog(Frame, boolean): Khởi tạo dialog, tham số thứ frame chứa dialog, tham số thứ hai xác định dialog có modal hay không Dialog(Frame, String, boolean): Khởi tạo dialog, thêm tham số thứ hai dòng tiêu đề dialog setVisible(boolean): Thiết lập trạng thái hiển thị ẩn dialog hình setSize(int, int): Định kích cỡ cho dialog, tham số tương ứng chiều rộng chiều cao dialog setTitle(String)/getTitle(): Truy nhập thuộc tính dịng tiêu đề dialog setResizable(boolean): dialog Thiết lập thuộc tính cho phép thay đổi kích cỡ 137 setLayout(Layout): Thiết lập chế độ hiển thị đối tượng chứa dialog Chương trình 6.3 minh hoạ việc thêm dialog (đang rỗng, chưa có đối tượng thành phần nào) vào frame Chương trình 6.3 package vidu.chuong6; import java.awt.*; public class DialogDemo{ public static void main(String[] args) { // Khai báo khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has a dialog!”); myFrame.setSize(300,150); // Định kích cỡ frame // Khai báo khởi tạo dialog IT Dialog myDialog = new Dialog(myFrame, “An empty dialog!”, true); myDialog.setSize(300,150); // Định kích cỡ dialog myDialog.setVisible(true); // Hiển thị dialog } P T } Hình 6.3: Kết demo Dialog 6.1.2 Các đối tượng component Các đối tượng component dùng để làm thành phần đối tượng khung chứa, chúng dùng độc lập, mà phải gắn vào đối tượng khung chứa container Label Label (nhãn) đối tượng để hiển thị văn tĩnh, văn mà người dùng thay đổi trực tiếp Các phương thức Label: Label(): Khởi tạo nhãn rỗng Label(String): Khởi tạo nhãn với nội dung văn tham số đầu vào 138 Label(String, int): Khởi tạo nhãn có nội dung sẵn, tham số thứ hai xác định cách lề nhãn so với khung chứa, bao gồm {Label.CENTER, Label.LEFT, Label.RIGHT} setText(String)/getText(): Truy nhập nội dung văn nhãn setAlignment(int)/getAlignment(): Truy nhập thuộc tính lề nhãn setFont(Font): Định dạng phông chữ nhãn Chương trình 6.4 minh hoạ việc sử dụng nhãn frame Chương trình 6.4 package vidu.chuong6; import java.awt.*; public class LabelDemo{ public static void main(String[] args) { // Khai báo khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has a label!”); // Định kích cỡ frame IT myFrame.setSize(300,150); // Khai báo khởi tạo label T Label myLabel = new Label(); myLabel.setText(“This is a label!”);//Gán nội dung văn P myLabel.setAlignment(Label.CENTER);// Căn lề myFrame.add(myLabel); // Gắn label vào frame myFrame.setVisible(true); // Hiển thị frame } } Hình 6.4: Kết demo Label TextField TextArea Đây hai đối tượng dùng để biểu diễn văn người dùng thay đổi nội dung văn chứa chúng Điểm khác biệt TextField cho phép dòng văn bản, TextArea cho phép chứa nhiều dòng văn Các phương thức chung hai lớp này: 139 setText(String)/getText(): Truy nhập thuộc tính nội dung văn chứa ô getSelectedText(): ô Trả chuỗi văn bơi đen (đánh dấu chọn) getSelectedStart(): (tính từ 0) Trả vị trí kí tự đầu vùng đánh dấu chọn getSelectedEnd(): từ 0) Trả vị trí kí tự cuối vùng đánh dấu chọn (tính selectAll(): Đánh dấu chọn tồn văn setEditable(boolean): Xác định vùng văn edit hay không Các phương thức khác lớp TextField: TextField(): Khởi tạo ô văn rỗng Khởi tạo ô văn rỗng, độ rộng xác định tham TextField(String): đầu vào Khởi tạo ô văn có nội dung xác định tham số TextField(String, int): Khởi tạo vởi nội dung có sẵn, độ rộng xác định IT TextField(int): số vào setEchoChar(char)/getEchoChar(): Truy nhập thuộc tính kí tự thay văn Thuộc tính dùng ta cần che dấu thông Trả độ rộng ô văn P getColums(): T tin văn bản, ví dụ, gõ mật chương trình Các phương thức khác lớp TextArea: TextArea(): Khởi tạo vùng văn rỗng TextArea(int, int): Khởi tạo vùng văn rỗng, kích cỡ (số dịng, số cột) xác định tham số vào TextArea(String): Khởi tạo vùng văn có nội dung xác định tham số đầu vào TextArea(String, int, int): Khởi tạo vùng văn với nội dung có sẵn, độ rộng xác định appendText(String): Thêm đoạn văn vào cuối đoạn văn vùng insertText(String, int): Chèn đoạn văn vào vị trí xác định (tham số thứ hai) vùng văn replaceText(String, int, int): Thay đoạn văn vùng, đánh dấu vị trí bắt đầu vị trí kết thúc (tham số thứ hai thứ ba), đoạn văn (tham số thứ nhất) 140 getRows()/getColums(): Trả số dòng/cột vùng văn Chương trình 6.5 minh hoạ việc đặt đối tượng ô văn vùng văn vào frame Chương trình 6.5 package vidu.chuong6; import java.awt.*; public class TextDemo{ public static void main(String[] args) { // Khai báo khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has some texts!”); myFrame.setSize(300,150); // Định kích cỡ frame // Khai báo khởi tạo textField TextField myTextField = new TextField(“A text field!”); // Gắn vào frame IT myFrame.add(myTextField); // Khai báo khởi tạo textArea TextArea myTextArea = new TextArea(5, 40); TextField’s T String str=“The ”+myTextField.getColumns(); columns is: P str += “The TextArea’s size is: ” + myTextArea.getRows() + “*” + myTextArea.getColumns(); myTextArea.setText(str); // Thiết lập nội dung myFrame.add(myTextArea); // Gắn vào frame myFrame.setVisible(true); // Hiển thị frame } } Hình 6.5: Kết demo Text 141 Button Button đối tượng nút lệnh, dùng để thực nhiệm vụ xác định Các phương thức nút nhấn: Button(String): Khởi tạo nút nhấn với tên xác định nút setLabel(String)/getLabel(): Truy nhập tên nút nhấn Chương trình 6.6 minh hoạ việc tạo nút nhấn frame Chương trình 6.6 package vidu.chuong6; import java.awt.*; public class ButtonDemo{ public static void main(String[] args) { // Khai báo khởi tạo frame có tiêu đề Frame myFrame = new Frame(“Frame has a button!”); // Định kích cỡ frame IT myFrame.setSize(300,150); // Khai báo khởi tạo button Button myButton = new Button(“Click!”); } myFrame.setVisible(true); // Hiển thị frame T // Gắn vào frame P } myFrame.add(myButton); Hình 6.6: Kết demo Button Tuy nhiên, click vào nút nhấn này, không xảy điều già Lí chưa cài đặt việc xử lí kiện cho nút nhấn Nội dung phần 6.1.3 trình bày việc xử lí kiện cho đối tượng 6.1.3 Các kiện đối tượng Mỗi đối tượng component có số kiện xác định, phát sinh từ đối tượng Java cung cấp số lớp kiện nằm thư gói java.awt.event: import java.awt.event.*; 142 Các lớp kiện đối tượng bao gồm: ActionEvent: Xuất nút bị click vào, danh sách (list) chọn, menu chọn ComponentEvent: Xuất component bị thay đổi kích cỡ, vị trí, trạng thái Xuất component có focus ItemEvent: Xuất menu item chọn bỏ, checkbox list item click vào WindowEvent: Xuất sổ mở ra, kích hoạt, đóng lại TextEvent: Xuất giá trị văn đối tượng TextField TextArea bị thay đổi MouseEvent: Xuất chuột click, di chuyển qua, nhấn xuống thả KeyEvent: Xuất có đầu vào từ bàn phím IT FocusEvent: ActionListener ComponentListener FocusListener P ItemListener T Các giao tiếp cài đặt để xử lí kiện trên: WindowListener TextListener MouseListener MouseMotionListener KeyListener Khi cài đặt giao tiếp này, cần cài đặt lại phương thức xử lí kiện: public void actionPerformed(){ … // Cài đặt lại mã lệnh } Để xác định kiện phát sinh từ component nào, ta dùng phương thức getSource(): .getSource(); Chương trình 6.7 cài đặt ứng dụng hồn chỉnh, bao gồm: Hai nhãn tiêu đề cho hai ô văn Hai ô văn bản, để nhập số liệu vào 143 Bốn nút nhấn tương ứng để thực thao tác nhân, chia, cộng, trừ số liệu nhập từ hai ô văn Thêm nút nhấn, click vào thoát khỏi chương trình (chương trình kết thúc) Chương trình 6.7 package vidu.chuong6; import java.awt.*; import java.awt.event.*; public class EventDemo extends Frame implements ActionListener{ Label lbl1, lbl2, lblKq; TextField txt1, txt2; Button btnCong, btnTru, btnNhan, btnChia, btnThoat; public EventDemo(){ IT super(“Event demo!”); this.setLayout(new GridLayout(6,2)); dòng, cột lbl1 = new Label(“So thu nhat:”); T this.add(lbl1); txt1 = new TextField(); //Chế độ hiển thị // Nhãn số thứ // Ô văn số thứ P this.add(txt1); lbl2 = new Label(“So thu hai:”); // Nhãn số thứ hai this.add(lbl2); txt2 = new TextField(); // Ô văn số thứ hai this.add(txt2); lblKq = new Label(); // Nhãn kết this.add(lblKq); this.add(new Label()); // Các nút nhấn btnCong = new Button(“Cong”); // Nút cộng btnCong.addActionListener(this); // Bắt kiện this.add(btnCong); btnTru = new Button(“Tru”); // Nút trừ btnTru.addActionListener(this); this.add(btnTru); 144 } 4.3 JSON Binding Support ASP.NET MVC bao gồm ràng buộc hỗ trợ JSON cho phép phương thức hành động để nhận liệu JSON-encoded modelbind tham số phương thức hành động Khả hữu ích tình liên quan đến client template data binding MVC cho phép bạn dễ dàng kết nối client template với phương thức hành độngtrên máy chủ gởi nhận nhận liệu JSON Model Validation Imporvements 5.1 Thuộc tính siêu liệu “DataAnnotations” IT ASP.NET MVC hỗ trợ thuộc tính siêu liệu DataAnnotations DisplayAttribute 5.2 Lớp “ValidationAttribue” P T Lớp ValidationAttribute cải tiến NET Framerwork để hỗ trợ tải IsValid cung cấp thêm thông tin bối cảnh xác nhận tại, chẳng hạn đối tượng xác nhận Điều cho phép kịch phong phú hơn, nơ bạn xác nhận giá trị dựa thuộc tính khác model Ví dụ, thuộc tính CompareAttribute cho phép bạn so sánh giá trị thuộc tính model Trong ví dụ đây, thuộc tính ComparePassword phải phù hợp với trường Password để hợp lệ: public class User { [Required] public string Password { get; set; } [Required, Compare("Password")] public string ComparePassword { get; set; } } 5.3 Validation Interfaces - Giao diện IValidatableObject cho phép bạn thực cấp model xác nhận, cho phép bạn cung cấp thơng điệp xác nhận lỗi cụ 272 thể trạng thái model tổng thể, hay giữ thuộc tính model MVC lấy lỗi từ giao diện IValidatableObject ràng buộc mơ hình, từ động gắn cờ hay tô sáng trường bị ảnh hưởng phậm vi view cách sử dụng công cụ hỗ trợ hình thức HTML - Giao diện IClientValidatable cho phép ASP.NET MVC khám phá thời gian chạy dù validator hỗ trợ cho việc xác thực client Giao diện thiết kế để tích hợp với hàng loạt validation frameworks Dependency Injection Imporvements - ASP.NET MVC cung cấp hỗ trợ tốt cho việc áp dụng Dependency Injection (DI) tích hợp với Dependency Injection hay Inversion of Control (IOC) containers Các hỗ trợ cho DI thêm vào: IT oControllers (registering and injecting controller factories, injecting controllers) oViews (registering and injecting view engines, injecting dependencies into view pages) T oAction filters (locating and injecting filters) oModel binders (registering and injecting) P oModel validation providers (registering and injecting) oModel metadata providers (registering and injecting) oValue providers (registering and injecting) - MVC hỗ trợ thư viện Common Service Locator DI container có hỗ trợ thư viện IServiceLocator Nó hỗ trợ giao diện IDpendencyResolver làm cho dễ dàng để tích hợp với DI frameworks 3.4 MVC Phần mơ tả tính giới thiệu MVC ASP.NET Cải tiến để mặc mẫu dự án (Enhancements to Default Project Templates) o Các mẫu sử dụng để tạo ASP.NET MVC dự án cập nhật để tạo trang web trông đại hơn: 273 o Ngoài để cải thiện thẩm mỹ, cải thiện chức mẫu Các mẫu sử kỹ thuật dựng hình thích ứng nhìn tốt trình duyệt máy tính để bàn trình duyệt di động mà khơng cần tùy chỉnh o Để xem render adaptive hoạt động, bạn sử dụng giả lập di động cần cố gắng thay đổi kích thước cửa sổ trình duyệt máy tính để bàn để nhỏ Khi cửa sổ trình duyệt đủ nhỏ, bố trí trang thay đổi o Một phát triển dự án mẫu mặc việc sử dụng JavaScript để cung cấp giao diện người dùng phong phú Đăng nhập Đăng ký liên kết sử dụng template ví dụ cách sử dụng hộp thoại giao diện jQuery để trình bày hình đăng nhập phong phú IT Mẫu dự án di động (Mobile Project Template) o Nếu bạn bắt đầu dự án muốn tạo trang web đặc biệt cho trình duyệt di động máy tính bảng, bạn sử dụng mẫu dự T án ứng dụng di động Điều dựa jQuery Mobile, thư viện mã P nguồn mở để xây dựng tối ưu hoá giao diện cảm ứng cho người dùng o Mẫu có chứa cấu trúc ứng dụng tương tự mẫu ứng dụng Internet (và mã điều khiển giống nhau), mang phong cách sử jQuery Mobile nhìn tốt cư xử tốt thiết bị di động dựa cảm 274 ứng Để tìm hiểu thêm làm để cấu trúc phong cách giao diện người dùng di động, xem trang web dự án jQuery Mobile o Nếu bạn có trang web máy theo định hướng mà bạn muốn thêm vào xem để tối ưu hoá điện thoại di động, bạn muốn tạo trang web phục quan khác theo kiểu trình máy tính để bàn di động, bạn sử dụng tính hiển thị chế độ (Xem phần tiếp theo.) Chế độ hiển thị (Display Modes) o Tính Display Modes cho phép xem ứng dụng chọn tùy thuộc vào trình duyệt đưa u cầu Ví dụ, trình duyệt máy tính để bàn yêu cầu trang ‘Home page’, ứng dụng sử dụng Views\Home\Index.cshtml template Nếu trình duyệt di động yêu trang chủ, ứng dụng trả lại Views\Home\Index.mobile.cshtml IT template o Layouts partials ghi đè cho trình duyệt cụ thể o Nếu bạn muốn tạo Views cụ thể, bố trí, phần cho thiết bị khác, T bạn đăng ký thể DefaultDisplayMode để xác định tên để tìm kiếm yêu cầu đáp ứng điều kiện đặc thù Ví dụ, bạn thêm đoạn P mã sau vào phương thức Application_Start file Global.asax đăng ký chuỗi “iPhone” chế độ hiển thị áp dụng trình duyệt iPhone Apple tạo yêu cầu : DisplayModes.Modes.Insert(0, new DefaultDisplayMode("iPhone") { ContextCondition = (context => context.Request.UserAgent.IndexOf ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) }); Sau chạy mã này, trình duyệt iPhone Apple tạo yêu cầu, ứng dụng bạn sử dụng Views \ Shared \ _Layout.iPhone.cshtml layout (nếu tồn tại) 4.jQuery Mobile, the View Switcher, and Browser Overriding 275 jQuery Mobile thư viện mã nguồn mở để xây dựng giao diện người dùng web cảm ứng tối ưu hóa - Một thành phần view-switcher, bao gồm Views / Shared / _ViewSwitcher.cshtml partial view ViewSwitcherController.cs controller Sau bạn cài gói phần mềm, chạy ứng dụng bạn cách sử dụng trình duyệt di động (hoặc tương đương, Firefox User Agent Switcher add-on) Bạn thấy trang trơng khác nhau, jQuery Mobile xử lý layout phong cách Để tận dụng lợi này, bạn làm sau: - Tạo điện thoại di động cụ thể view ghi đè mô tả chế độ hiển thị trước (ví dụ, tạo Views \ Home \ Index.mobile.cshtml để ghi đè lên Views \ Home \ Index.cshtml dành cho trình duyệt điện thoại di động) - Đọc tài liệu jQuery Mobile để tìm hiểu thêm làm để thêm yếu tố giao diện người dùng cảm ứng tối ưu hóa chế độ xem di động IT Một quy ước cho trang web tối ưu hoá điện thoại di động thêm liên kết văn giống chế độ xem Desktop trang web toàn cho phép người chuyển sang phiên máy trang Các gói phần mềm jQuery.Mobile.MVC T bao mẫu view-switcher thành phần cho mục đích Nó sử dụng Views mặc định \ Shared \ _Layout.Mobile.cshtml, trơng trang trả lại: P Nếu khách truy cập nhấp vào liên kết, họ chuyển sang phiên máy tính để bàn trang.Bởi layout máy tính để bàn bạn không bao gồm công tắc xem cách mặc định , khách viếng thăm khơng có cách để có chế độ di động Để kích hoạt tính này, thêm tham chiếu sau tới _ViewSwitcher tới layout máy tính bạn, cần bên phần tử : @Html.Partial("_ViewSwitcher") - switcher view sử dụng tính gọi Browser Overriding Tính cho phép yêu cầu xử lý ứng dụng bạn thể họ đến từ trình duyệt khác (đại lý người sử dụng) so với họ thực - Browser Overriding tính cốt lõi ASP.NET MVC có sẵn bạn khơng cài đặt gói jQuery.Mobile.MVC Tuy nhiên, ảnh hưởng đến View bố cục, xem phần lựa chọn – khơng ảnh hưởng đến tính ASP.NET khác phụ thuộc vào đối tượng Request.Browser 276 Theo mặc định, ghi đè lên người sử dụng đại lý lưu trữ cách sử dụng cookie Nếu bạn muốn để lưu trữ ghi đè lên nơi khác (ví dụ, sở liệu), bạn thay nhà cung cấp mặc định (BrowserOverrideStores.Current) 5.Recipes for Code Generation in Visual Studio (công thức cho hệ Mã Visual Studio) o Bí tính cho phép Visual Studio để tạo giải pháp cụ thể mã dựa bao bì mà bạn cài đặt cách sử dụng NuGet Khung Bí làm cho dễ dàng cho nhà phát triển viết mã hệ bổ sung, bạn sử dụng để thay xây dựng máy phát mã Add Area , Add Controller, Add View Bởi cơng thức triển khai gói NuGet, họ dễ dàng kiểm tra vào kiểm soát nguồn chia sẻ với IT tất nhà phát triển dự án tự động Họ có sẵn sở cho giải pháp o Hỗ trợ cho công việc điều khiển không đồng o Bây bạn viết phương pháp hành động không đồng phương P công tác T pháp mà trả đối tượng loại cơng tác Ví dụ, bạn sử dụng Visual C # (hoặc cách sử dụng CTP Async), bạn tạo phương thức hành động không đồng mà trông sau: public async Task Index(string city) { var newsService = new NewsService(); var sportsService = new SportsService(); return View("Common", new PortalViewModel { NewsHeadlines = await newsService.GetHeadlinesAsync(), SportsScores = await sportsService.GetScoresAsync() }); } 277 Trong phương pháp hành động trước đó, gọi đến newsService.GetHeadlinesAsync sportsService.GetScoresAsync gọi không đồng không chặn thread từ thread pool Phương pháp hành động không đồng trả lại trường cơng việc hỗ trợ timeouts Để thực hủy phương thức hành động bạn, thêm tham số CancellationToken loại chữ ký phương thức hành động Ví dụ sau cho thấy phương thức hành động khơng đồng mà có thời gian chờ 2500 mili giây hiển thị nhìn TimedOut cho khách hàng thời gian chờ xảy [AsyncTimeout(2500)] [HandleError(ExceptionType = typeof(TaskCanceledException), View = "TimedOut")] public async Task Index(string city, CancellationToken cancellationToken) { var newsService = new NewsService(); return View("Common", new PortalViewModel { IT var sportsService = new SportsService(); T NewsHeadlines = await newsService.GetHeadlinesAsync(cancellationToken), }); KẾT LUẬN P SportsScores = await sportsService.GetScoresAsync(cancellationToken) Ý nghĩa mơ hình tách biệt phần ánh xạ, lưu trữ xử lý liệu (model) tách biệt hoàn tồn với thành phần trình bày giao diện kết cho người dùng hay phần giao diện giúp đón nhập nhập xuất cho người dùng (View).Việc tách cho phép người lập trình tách biệt cơng việc trình xây dựng chức cho ứng dụng trình xây dựng giao diện cho người dùng Bên cạnh đó, MVC cho phép việc thay đổi thành phần liệu (model) không ảnh hưởng nhiều đến giao diện người dùng mơ hình đưa Model để không cho người dùng thao tác trực tiếp vào liệu vật lý (Cơ sở liệu tập tin) mà phải thông qua Model, cho dù liệu vật lý thay đổi cấu trúc cấu trúc Model cho việc truy cập, xử lý, lưu trữ liệu khơng bị ảnh hưởng Nhìn theo khái niệm thành phần giao tiếp Model tên hàm – tham số truyền (interface) thay đổi, nội dung thay đổi cách thức cài đặt bên hàm Nhưng nội dung người sử dụng chức giao diện không quan tâm đa số họ quan tâm 278 interface gì, giá trị nhập kết xuất Do vậy, tính linh hoạt uyển chuyển mơ hình MVC Ngồi ra, việc tách biệt rời rạc Model View theo phân tích thể tính ưu việt Tuy nhiên, ứng dụng có nhiều Model nhiều View, vậy, mơ hình cần có thành phần lựa chọn kết nối thành phần lại với theo cách hiệu Controller đối tượng đưa để đón nhận yêu cầu nhập xuất từ người dùng, xác định model tương ứng với view nhập để đưa model xử lý, kết xử lý model chuyển đến controller để controller xác định view kết xuất để đổ kết xử lý hiển thị cho người dùng Nhiều view đồng thời chạy model Nhiều view khác hoạt động thời điểm view mô tả đồng thời độc lập thong tin giống từ model Điều áp dụng nhiều GUI MVC web MVC IT Tuy nhiên MVC có điểm trừ như: o Gia tăng phức tạp Sự kết nối chặt chẽ view controller model thay đổi giao diện model đòi hỏi thay đổi song song view T địi hỏi thay đổi thêm controller Sự thay đổi code trở nên khó khăn hơn.Cơ chế truyền thay đổi khơng hiệu P model thay đổi thường cun địi hỏi nhiều thơng báo thay đổi, vấn đề chung passive model sử dụng o Sự kết nối chặt chẽ view controller Sự tách biệt rõ ràng khó, đơi khơng thể Mơ hình MVC sử dụng rộng rãi giới World Wide Web Hầu tất trang web giới sử dụng mơ hình để hoạt động Web văn HTML Việc xử lí để tạo văn HTML ngôn ngữ khác đảm nhiệm (PHP, ASP.NET, JAVA) Để phân biệt thành phần MVC WEB ta hiểu sau: o View: Là Browser hay trình duyệt web người dùng o Controller: văn HTML xuất browser o Model: ngơn ngữ phía server bên (PHP, ASP, JAVA) Database Ngồi lợi ích mà MVC mang lại thể WEB động: o Người dùng thay đổi trình duyệt mà vào web (thay đổi view) 279 o Có thể thay đổi ngôn ngữ Database để xuất view nội dung trước thay đổi P T IT o Thay đổi giao diện web (thay đổi controller) 280 MỤC LỤC GIỚI THIỆU PHẦN NHỮNG KHÁI NIỆM CƠ BẢN CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG CHƯƠNG TỔNG QUAN VỀ CÁCH TIẾP CẬN HƯỚNG ĐỐI TƯỢNG 1.1 PHƯƠNG PHÁP TIẾP CẬN CỦA LẬP TRÌNH TRUYỀN THỐNG 1.1.1 Lập trình tuyến tính 1.1.2 Lập trình cấu trúc 1.2 PHƯƠNG PHÁP TIẾP CẬN HƯỚNG ĐỐI TƯỢNG 1.2.1 Phương pháp lập trình hướng đối tượng IT 1.2.2 Phương pháp phân tích thiết kế hướng đối tượng 10 1.3 SO SÁNH HAI CÁCH TIẾP CẬN .12 1.4 XU HƯỚNG PHÁT TRIỂN CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 13 T TỔNG KẾT CHƯƠNG 15 CHƯƠNG 16 P NHỮNG KHÁI NIỆM CƠ BẢN CỦA 16 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 16 2.1 CÁC KHÁI NIỆM CƠ BẢN .16 2.1.1 Đối tượng 16 2.1.2 Lớp đối tượng 17 2.1.3 Trừu tượng hoá đối tượng theo chức 19 2.1.4 Trừu tượng hoá đối tượng theo liệu 20 2.1.5 Khái niệm kế thừa 21 2.1.6 Khái niệm đóng gói .23 2.1.7 Khái niệm đa hình 24 2.2 SO SÁNH LỚP VÀ CẤU TRÚC 25 2.3 THÀNH PHẦN PRIVATE VÀ PUBLIC CỦA LỚP 26 2.4 MỘT SỐ NGƠN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 27 2.4.1 C++ 27 281 2.4.2 ASP.NET C#.NET 28 2.4.3 Java 28 TỔNG KẾT CHƯƠNG 29 CÂU HỎI VÀ BÀI TẬP CHƯƠNG 30 PHẦN 31 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA 31 CHƯƠNG 32 GIỚI THIỆU VỀ JAVA 32 3.1 LỊCH SỬ PHÁT TRIỂN CỦA JAVA 32 3.1.1 Java 32 3.1.2 Đặc trưng ngôn ngữ Java 32 3.1.3 Cài đặt Java 35 3.2 KIẾN TRÚC CHƯƠNG TRÌNH XÂY DỰNG TRÊN JAVA 36 3.2.1 Kiến trúc chương trình Java 36 IT 3.2.2 Chương trình Java 39 3.2.3 Phân tích chương trình 40 3.3 CÁC KIỂU DỮ LIỆU VÀ TOÁN TỬ CƠ BẢN TRÊN JAVA 42 T 3.3.1 Khai báo biến 42 P 3.3.2 Kiểu liệu 42 3.3.3 Các toán tử 44 3.4 CÁC CẤU TRÚC LỆNH TRÊN JAVA 48 3.4.1 Câu lệnh if-else .48 3.4.2 Câu lệnh switch-case .49 3.4.3 Vòng lặp While .51 3.4.4 Vòng lặp do-while 52 3.4.5 Vòng lặp for 53 3.5 CASE STUDY I 54 TỔNG KẾT CHƯƠNG 56 CÂU HỎI VÀ BÀI TẬP CHƯƠNG 57 CHƯƠNG 60 KẾ THỪA VÀ ĐA HÌNH TRÊN JAVA 60 4.1 KẾ THỪA ĐƠN 60 282 4.1.1 Lớp 60 4.1.2 Sự kế thừa 65 4.2 KẾ THỪA BỘI 67 4.2.1 Giao tiếp 68 4.2.2 Sử dụng giao tiếp 69 4.3 LỚP TRỪU TƯỢNG 71 4.3.1 Khai báo 71 4.3.2 Sử dụng lớp trừu tượng 73 4.4 ĐA HÌNH .74 4.4.1 Nạp chồng .75 4.4.2 Đa hình 75 4.5 CASE STUDY II 77 4.5.1 Lớp Human 77 IT 4.5.2 Lớp Person 78 4.5.3 Lớp Employee .79 4.5.4 Chương trình demo .81 T TỔNG KẾT CHƯƠNG 82 CÂU HỎI VÀ BÀI TẬP CHƯƠNG 83 P CHƯƠNG 88 BIỂU DIỄN VÀ CÀI ĐẶT 88 CÁC CẤU TRÚC DỮ LIỆU TRỪU TƯỢNG TRÊN JAVA 88 5.1 PHƯƠNG PHÁP DUYỆT VÀ ĐỆ QUI .88 5.1.1 Các phương pháp duyệt .88 5.1.2 Phương pháp đệ qui .89 5.2 PHƯƠNG PHÁP SẮP XẾP VÀ TÌM KIẾM 89 5.2.1 Các phương pháp xếp .89 5.2.2 Các phương pháp tìm kiếm 91 5.3 NGĂN XẾP VÀ HÀNG ĐỢI 93 5.3.1 Ngăn xếp .93 5.3.2 Hàng đợi 96 5.4 DANH SÁCH LIÊN KẾT 97 5.4.1 Danh sách liên kết đơn 97 283 5.4.2 Danh sách liên kết kép 103 5.5 CÂY NHỊ PHÂN .109 5.6 ĐỒ THỊ 115 5.6.1 Biểu diễn đồ thị 115 5.6.2 Cài đặt đồ thị khơng có trọng số 116 5.6.3 Cài đặt đồ thị có trọng số 122 5.7 CASE STUDY III 127 TỔNG KẾT CHƯƠNG 133 CÂU HỎI VÀ BÀI TẬP CHƯƠNG 134 CHƯƠNG 135 LẬP TRÌNH GIAO DIỆN TRÊN JAVA 135 6.1 GIAO DIỆN VỚI CÁC ĐỐI TƯỢNG CƠ BẢN 135 6.1.1 Các đối tượng container 135 6.1.2 Các đối tượng component .138 IT 6.1.3 Các kiện đối tượng .142 6.2 GIAO DIỆN VỚI CÁC ĐỐI TƯỢNG MULTIMEDIA 146 T 6.2.1 Ô đánh dấu nút chọn .146 6.2.2 Lựa chọn 148 P 6.2.3 Danh sách 150 6.2.4 Trình đơn .153 6.3 CÁC KỸ THUẬT TẠO TABLES 156 6.3.1 Trình bày Flow Layout .156 6.3.2 Trình bày Grid Layout 158 6.3.3 Trình bày Border Layout .159 6.3.4 Trình bày GridBag Layout 160 6.3.5 Trình bày Null Layout 163 6.4 HTML & APPLET 164 6.4.1 Cấu trúc Applet .164 6.4.2 Sử dụng applet .166 6.4.3 Truyền tham số cho Applet 169 6.5 GIỚI THIỆU VỀ SWING 170 6.5.1 Mở rộng đối tượng component .171 284 6.5.2 Mở rộng đối tượng container 172 6.6 CASE STUDY IV 175 TỔNG KẾT CHƯƠNG 182 CÂU HỎI VÀ BÀI TẬP CHƯƠNG 183 CHƯƠNG 184 THƯ VIỆN CÁC COLLECTION TRONG JAVA VÀ ÁP DỤNG 184 7.1 Các thành phần Collection 185 7.2 Giới thiệu Collection: 187 7.3 Giới thiệu List cách sử dụng 193 7.4 Giới thiệu Set Interface: .211 7.5 Giới thiệu Map 221 HƯỚNG DẪN TRẢ LỜI CÂU HỎI VÀ BÀI TẬP 231 Chương 231 Chương 231 IT Chương 232 Chương 233 T Chương 236 Chương 237 P TÀI LIỆU THAM KHẢO .242 PHỤ LỤC: GIỚI THIỆU MƠ HÌNH MVC VÀ ÁP DỤNG 243 TỔNG QUAN VỀ MVC .244 1.1.LỊCH SỬ PHÁT TRIỂN MƠ HÌNH MVC 244 1.2 KIẾN TRÚC TRONG MƠ HÌNH MVC 244 1.3.CÁC MỐI QUAN HÊ TRONG MVC 246 1.4 MVC HOẠT ĐỘNG NHƯ THẾ NÀO? .248 1.5.ƯU NHƯỢC ĐIỂM CỦA MƠ HÌNH MVC 249 SO SÁNH MVC VỚI MƠ HÌNH LẬP TRÌNH KHÁC .250 2.1 MVC vs LAYER 250 2.2.MVC vs MOVE .256 CÁC MÔ HÌNH MVC 259 3.1.MVC 1(Page-Centric Architecture) .259 3.2 MVC 2(Servlet-Centric Architecture) 260 285 3.3 MVC 268 3.4 MVC 273 KẾT LUẬN 278 P T IT MỤC LỤC 281 286 ... Button2: vị trí (2, 2), kích thước (1,1) Button btn2 = new Button(“Click2”); cts.gridx = 2; cts.gridy = 2; cts.gridheight = 1; cts.gridwidth = 1; layout.setConstraints(btn2, cts); myFrame.add(btn2);... myFrame.add(btn1); // Gắn vào frame // Button2: vị trí (70, 120 ), kích thước (50 ,20 ) Button btn2 = new Button(“Click2”); btn2.setBounds(70, 120 , 50, 20 ); myFrame.add(btn2); // Gắn vào frame myFrame.setVisible(true);... Dialog 6.1 .2 Các đối tượng component Các đối tượng component dùng để làm thành phần đối tượng khung chứa, chúng dùng độc lập, mà phải gắn vào đối tượng khung chứa container Label Label (nhãn) đối tượng