Caro là một loại game đối kháng hai người chơi trên một tờ giấy hay màn hình có kẻ các ô vuông đều nhau và người chơi đánh các kí tự OX vào đó. Luật chơi: trò chơi gồm hai người chơi mỗi bên lần lượt đánh dấu O—X, nếu bên nào đạt được năm dấu chung hàng (có thể là hàng dọc, hàng ngang, hàng chéo) thì thắng ngược lại người còn lại sẽ thua.
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
- -BÁO CÁO BÀI TẬP LỚN PHÁT TRIỂN PHẦM MỀM THEO CẤU PHẦN
Đề tài:
Xây dựng game cờ caro trên ngôn ngữ java
theo hướng cấu phần
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
- -BÁO CÁO BÀI TẬP LỚN PHÁT TRIỂN PHẦM MỀM THEO CẤU PHẦN
Đề tài:
Xây dựng game cờ caro trên ngôn ngữ java
theo hướng cấu phần
Trang 3LỜI NÓI ĐẦU
Nói đến công nghệ thông tin chúng ta hình dung ngay đến một môi trường phát triển năng động vào bậc nhất trên thế giới hiện nay Nó được áp dụng vào mọi mặt đời sống, xã hội của con người, từ công việc cho tới giải trí
Cùng với sự phát triển vượt bậc của CNTT, con người đã làm nên những sản phẩm hữu ích để phục vụ cho đời sống tiêu biểu phải nói đến ngành giải trí Hiện nay có rất nhiều chương trình game ra đời mang tính giải trí mạnh mẽ và thú vị, tuy nhiên những chương trình nhỏ mang tính trí tuệ vẫn chiếm một phần nào đó trong lĩnh vực này Một trong những chương trình đó phải nói đến các chương trình chơi
cờ, đại diện là “Trò chơi cờ caro” Một trong những loại cờ khá được nhiều người
yêu thích vì tính đơn giản, thú vị của trò chơi Chương trình được viết bằng ngôn ngữ Java, là một loại ngôn ngữ có tính tương tác khá mạnh với những công cụ có sẵn giúp cho người lập trình dễ dàng phát triển ứng dụng nhanh và thuận lợi
Nhóm chúng em là một nhóm sinh viên với kinh nghiệm lập trình chưa có nhiều, kiến thức còn hạn hẹp, kĩ năng còn nhiều hạn chế nhưng nhận được sự giúp đỡ tận tình của thầy Nguyễn Thái Cường cũng như các bạn trong lớp, nhóm em đã cố gắnghoàn thành xong bài tập lớn Tuy nhiên bài tập lớn còn nhiều thiếu xót và lỗi rất mong nhận được sự đóng góp tích cực của mọi người để nhóm em hoàn thiện tốt hơn nữa
Nhóm em xin chân thành cảm ơn!
Hà Nội, ngày … tháng 11 năm 2018 Nhóm sinh viên thực hiện!
Trang 4Tóm tắt bài tập lớn
Đề tài: Xây dựng game cờ caro trên ngôn ngữ java theo hướng cấu phần
Nội dung bài tập lớn gồm có 3 chương:
Chương 1 Tổng quan về ngôn ngữ Java và lập trình hướng cấu phần
- Nêu loại ứng dụng trong BTL, ngôn ngữ sử dụng, đặc điểm của kiểu ứngdụng đó trong ngôn ngữ lập trình
- Kiến thức tổng quát về cấu phần, cách xây dựng kiểu ứng dụng đó theo cấu phần
Chương 2 Phân tích thiết kế hệ thống game cờ caro
- Chức năng chính của chương trình, phân bố các chức năng theo các modul (cấu phần), phân rã chức năng dựa theo các cấu phần đó
- Phân tích thiết kế dựa vào UML
Chương 3: Thực nghiệm và kết qua
Nêu ngắn gọn cách xây dựng chương trình từ mã nguồn (sử dụng command line
và công cụ) Cần chỉ rõ những cấu phần đã xây dựng ra
Trang 6tích vào những ô vuông “X” hoặc “O” sao cho 5 chữ “X” hoặc “O” đứng liền nhautạo thành 1 hàng thẳng , dọc, chéo, có thể là ngang là bạn thắng.
Chính vì lối chơi đơn giản không phức tạp và không bị nhàm chán nên cờ caro đãtrở nên rất phổ biến trong cuộc sống
3. Mục đích
Làm quen với các ngôn ngữ, các câu lệnh cơ bản và một số công nghệ
Nhằm giải trí nhẹ nhàng cho những ai đang căng thẳng, nâng cao trí tuệ
4. Mục tiêu
Hiểu được kiến thức về hướng cấu phần
Cách xây dựng một chương trình theo hướng cấu phần
Phân tích thiết kế hệ thống UML
Phân tích thành phần cho game
Công cụ: IntelliJ IDEA
PHẦN II PHẦN NỘI DUNG Chương 1 Tổng quát về ngôn ngữ Java và lập trình hướng cấu
phần
1.1. Ngôn ngữ lập trình Java
1.1.1. Khái niệm chung
Trang 7Java là một công nghệ xây dựng các ứng dụng phần mềm có vị trí rất lớn trong những năm cuối thế kỉ 20, đầu thế kỉ 21 Nó được coi là công nghệ mang tính cách mạng và khả thi nhất trong việc tạo ra các ứng dụng có khả năng chạy thống nhất trên nhiều nền tảng mà chỉ cần biên dịch một lần.
Đặc điểm nổi bật:
- Máy ảo Java (JVM - Java Virtual Machine)
- Thông dịch
- Độc lập nền
- Hướng đối tượng
- Đa nhiệm - đa luồng (MultiTasking - Multithreading)
- Khả chuyển (portable)
- Hỗ trợ mạnh cho việc phát triển ứng dụng
1.1.2. Java Swing
Java Swing là một phần của Java Foundation Classes (JFC) được sử dụng để tạo
các ứng dụng Window-Based Nó được xây dựng ở trên cùng của AWT (Abstract Windowing Toolkit) API và được viết hoàn toàn bằng Java
Không giống AWT, Java Swing cung cấp các thành phần (Component) gọn nhẹ
và độc lập nền tảng Javax.swing Package cung cấp các lớp cho Java Swing chẳng hạn như JButton, JTextField, JTextArea, JRadioButton, JCheckbox, JMenu,
JcolorChooser
Cấu trúc thứ bậc của các lớp trong Java Swing
Sơ đồ dưới đây cung cấp cho các bạn cái nhìn tổng quan về cấu trúc theo thứ bậc của các lớp trong Java Swing
Trang 8Hình 1.1 Cấu trúc thứ bậc trong Java Swing
Các phương thức được sử dụng phổ biến của lớp Component
Trong bảng sau, chúng tôi liệt kê một số phương thức thường được sử dụngtrong Java Swing
Trang 9public void setVisible(boolean b) Thiết lập tính nhìn thấy (visible) của
thành phần Theo mặc định là false
Có hai cách để tạo một Frame:
- Bởi tạo đối tượng của lớp Frame (quan hệ kết hợp - Association)
- Bởi kế thừa lớp Frame (quan hệ kế thừa - inheritance)
Phương thức setBounds(int xaxis, int yaxis, int width, int height) được sử
dụng để thiết lập vị trí của button
Giới thiệu Swing Control
Mỗi UI (User Interface) bao gồm ba mặt chính:
- Các phần tử UI: Đó là các phần tử nhìn thấy chủ yếu mà người dùng cuối
cùng nhìn thấy và tương tác với GWT cung cấp rất nhiều các phần tử đadạng từ cơ bản tới nâng cao Chúng ta sẽ giới thiệu chúng trong chương này
- Layout: Chúng định nghĩa cách các phần tử UI nên được tổ chức trên màn
hình và cung cấp đối tượng L&F (là viết tắt của Look and Feel) cuối cùng tớiGUI (Graphical User Interface) Phần này sẽ được trình bày trong chươngLayout
- Hành vi: Đó là các sự kiện xảy ra khi người dùng tương tác với các phần tử
UI Phần này sẽ được trình bày trong chương Xử lý sự kiện
Mỗi SWING control kế thừa các thuộc tính từ cấu trúc thứ bậc của lớpComponent
Lớp Component trong Java Swing
Lớp Component là lớp abstract cho các điều khiển trên UI mà không có menucủa SWING Component biểu diễn một đối tượng với sự biểu diễn đồ họa Sau đây
Trang 10Lớp Component này có một Constructor có tên là protected Component() Nó
được sử dụng để tạo một Component mới
Lớp Component bao gồm các trường sau:
static float BOTTOM_ALIGNMENT: Hằng này dễ dàng sử dụng cho
Control & Miêu ta
1 Lớp JLabel Một đối tượng JLabel là một thành phần để đặt text vào
Trang 11Một JCheckBox là một thành phần đồ họa mà có thể trong trạng
thái on (true) hoặc off(false)
7 Lớp JRadioButton
Lớp JRadioButton là một thành phần đồ họa mà có thể trong trạng
thái on (true) hoặc off (false) trong một nhóm
Trang 12Một đối tượng JTextArea là một thành phần text cho phép sửa đổi mộttext có nhiều dòng
Trang 13JPanel là một container (thùng chứa) nó dùng để chứa các đối tượng tương tự
như JFrame tuy nhiên nó không phải là 1 JFrame Dễ hiểu hơn thì bạn có thể hình dùng ngôi nhà của chúng ta là 1 JFrame, còn phòng ngủ, phòng khách, phòng ăn đó
là các JPanel, tức là trong một JFrame chứa các JPanel, trong mỗi JPanel lại có thể chứa các đối tượng hoặc thậm chí là các JPanel khác
Tạo Jpanel
Chúng ta có 2 Phương thức khởi tạo JPanel hay dùng đó là:
- JPanel(): Tạo 1 JPanel với Layout mặc định là FlowLayout
- JPanel(LayoutManager layout): Tạo 1 JPanel với Layout được chỉ định1.2. Lập trình hướng cấu phần
1.2.1. Khái niệm lập trình hướng cấu phần
Lập trình hướng cấu phần (COP – Component Oriented Programming) cho phép các chương trình có thể được xây dựng lên từ các cấu trúc phần mềm có sẵn, bằng việc tái sử dụng, tự chữa các khối mã máy tính Các thành phần phải tuân theo tiêu chuẩn nhất định, bao gồm giao diện, các kết nối, phát triển và triển khai các cấu phần theo nhiều hình dạng và kích cỡ khác nhau, từ các cấu phần ứng dụng kích cỡ nhỏ có thể giao dịch trung gian trực tiếp, cho đến những cấu phần khổng lồ bao chứa những chức năng mở rộng Về nguyên tắc, mỗi cấu phần có thể tái sử dụng độc lập với ngữ cảnh, nói cách khác, có thể sử dụng mọi lúc, mọi nơi
Các ngôn ngữ sử dụng lập trình hướng cấu phần: Visual Basic, Delphi, C#, Java…
1.2.2. Nguyên tắc của hướng cấu phần
Từ “cấu phần” đã được dùng trong ngành công nghiệp máy tính một thời gian dài Có một điều thực tế, khái niệm về cấu phần đã xuất hiện xung quanh chúng ta
từ trước khi máy tính ra đời Mặc dù chúng ta có thể có nhiều định nghĩa khác nhau
về phần mềm hướng cấu phần, nhưng các nguyên tắc về phần mềm cấu phần giống như cũ từ những các định nghĩa khác nhau
Các nguyên tắc cơ bản trong công nghệ phần mềm hướng cấu phần nói chung và lập trình hướng cấu phần nói riêng
• Nguyên tắc 1: Cách phân tích các thành phần đại diện và trừu tượng
Chiến lược cơ bản và hiệu quả để giải quyết bất kỳ vấn đề lớn và phức tạp trong khoa học máy tính là “phân chia và xử lý” Một ý tưởng chính trong phát triển phần mềm hướng cấu phần là tạo ra các module phần mềm mà nó tự khép kín và có khả năng độc lập triển khai Do đó các nhà phát triển phần mềm khác nhau sẽ có thể làm việc trên các thành phần độc lập khác nhau mà không cần phải giao tiếp với nhau nhiều, và các thành phần này sẽ làm việc liền mạch với nhau Ngoài ra, trong giai đoạn duy trì phần mềm, sẽ có thể thay đổi một số
Trang 14Khi chúng ta phân tách một hệ thống, chúng ta phân tách yếu tố của nó thànhcác phần riêng biệt bằng một số cách sau:
- Mỗi thành phần như là một mức chi tiết
- Mỗi thành phần có thể được giải quyết một cách độc lập
- Các triển khai của các thành phần này có thể được tích hợp để đáp ứng các yêu cầu của hệ thống
Sự trừu tượng là 1 cách để phân chia sản phẩm bằng cách thay đổi các mức chi tiết được xem xét Các thành phần phần mềm cố gắng che giấu một số chi tiết để cung cấp chỉ các thông tin cần thiết cho khách hàng thông qua giao diện của họ Chiến lược trừu tượng hóa và sau đó phân chia thành các kiểu điển hìnhtrong quá trình phát triển phần mềm Sự phân chia được sử dụng để phân mảnh phần mềm thành các thành phần mà có thể kết hợp được với nhau nhằm giải quyết các vấn đề được đặt ra Sự trừu tượng hỗ trợ đưa ra một lựa chọn tốt cho các thành phần Khoa học máy tính đã trải qua trừu tượng hóa khác nhau Thủ tục trừu tượng cho phép chúng ta phân chia một vấn đề thành các đơn vị chức năng độc lập Dữ liệu trừu tượng hoặc kiểu dữ liệu gói gọn các đối tượng với một tập hợp các hoạt động đặc trưng cho các hành vi của các đối tượng
• Nguyên tắc 2: Có thể dùng lại nên đạt được ở các trình độ khác nhau
Phần mềm tồn tài dưới nhiều hình thức khác nhau trong suốt quá trình kỹ phát triển phần mềm Tại các mô hình và các giai đoạn phân tích, các đặc tả yêucầu được xem như là một hình thức của phần mềm Trong giai đoạn thiết kế, thiết kế kiến trúc và thiết kế chi tiết các tài liệu là một phần của phần mềm Mã nguồn trong giai đoạn thực hiện và thực thi triển khai code đến các khách hàng
là chắc chắn Do đó, phần mềm có thể dùng lại, bao gồm việc tái sử dụng bất kỳsản phẩm phần mềm trong các định dạng khác nhau
Có năm hình thức của các thành phần phần mềm, cụ thể là: thành phần đặc
tả, thành phần giao diện, thành phần thực hiện, các thành phần được cài đặt và các thành phần đối tượng Mỗi hình thức của các thành phần phần mềm có thể được tái sử dụng trong các giai đoạn khác nhau của một vòng đời phần mềm
• Nguyên tắc 3: Phát triển phần mềm hướng cấu phần tăng độ tin cậy của phần mềm
Với những tiến bộ nhanh chóng của phần cứng máy tính, độ tin cậy cao, mạnh mẽ và rẻ hơn phần cứng có sẵn cho các ứng dụng khác nhau Độ tin cậy của một hệ thống tính toán chủ yếu dựa vào sự tin cậy của bộ phận một phần mềm Phát triển phần mềm hướng cấu phần và lập trình hướng thành phần cungcấp một cách có hệ thống để đạt được các hệ thống đáng tin cậy Do sự trừu tượng của các thành phần và hệ thống tích hợp của các thành phần, nó dễ dàng hơn nhiều để xác nhận yêu cầu quan trọng và xác minh an toàn cho các hệ thống hướng thành phần Mặt khác, thành phần tái sử dụng thường đã được kiểm nghiệm qua quá trình xác nhận và sử dụng thực tế trong một thời gian dài,
do đó, chất lượng của nó có thể yên tâm
Trang 15• Nguyên tắc 4: Phát triển phần mềm hướng cấu phần có thể tăng năng xuất phần mềm
Phần mềm hướng cấu phần được xây dựng bằng cách lắp ráp và tái sử dụng các thành phần hiện có hơn là phát triển từ đầu mỗi lần – tái sử dụng thay vì làm mới Quá trình này nhanh hơn nhiều so với việc phát triển một ứng dụng từ đầu trong hầu hết các trường hợp
• Nguyên tắc 5: Phát triển phần mềm hướng cấu phần thúc đẩy tiêu chuẩn phần mềm
Như Clemens Czyoerski mô tả, các thị phần để phát triển, thành phần tiêu chuẩn phải được đạt đúng chỗ Tiêu chuẩn có thể được sử dụng để tạo ra một thỏa thuận về chi tiết kỹ thuật giao diện vững chắc, tạo điều kiện cho hiệu quả của thành phần và đảm bảo COP là một mô hình lập trình mới, trong đó “plug-and-play” trở thành hiện thực trong phát triển phần mềm cũng như các thành phần phần cứng
1.2.3. Tại sao COP quan trọng?
Với lập trình hướng cấu phần, người ta có thể tiến hành lập trình theo phương thức sau:
- Xây dựng một thư viện các thành phần, mỗi thành phần thực hiện một công việc xác định
- Khi cần phát triển một phần mềm cụ thể, người ta chỉ cần chọn những thành phần có sẵn trong thư viện để ghép lại với nhau Người lập trình chỉ phát triển thêm các thành phần mình cần mà chưa có trong thư viện
COP cung cấp một phương thức cao hơn mức độ trừu tượng Có một số lượng ngày càng lớn các thành phần tái sử dụng thư viện hỗ trợ trong việc phát triển các ứng dụng cho các lĩnh vực khác nhau
COP có 3 mục tiêu chính: giải quyết phức tạp, quản lý thay đổi, và tái sử dụng
- Giai quyết phức tạp:
Chúng ta sống giới phức tạp ở thời đại bùng nổ thông tin Theo nhóm nghiêncứu ở trường đại học Berkeley năm 2000, “Thế giới sản xuất từ một đến hai exabytes (exabytes = 1018bytes) thông tin mỗi năm, đó là khoảng 250 MB cho mỗi người đàn ông, mỗi người phụ nữ và mỗi đứa trẻ trên trái đất Như vậy trong khoa học máy tính, kích thước độ phức và độ phức tạm tăng lên đáng kể
Và thật may mắn, COP cung cấp một cách hiệu quả để đối phó với sự phức tạp của phần mềm: phân chia và chinh phục
- Quan lý thay đổi:
Thay đôi là vốn có trong ngành công nghiệp công nghệ phần mềm Các yêu cầu người dùng thay đổi, thay đổi thông số kỹ thuật, thay đổi nhân sự, thay đổi công nghệ, thay đổi ngân sách và còn nhiều nguyên nhân thay đổi khác
Trang 16kiến trúc và trong dự án COP cung cấp một cách hiệu quả để thực hiện theo cácnguyên tắc cơ bản kỹ thuật phần mềm nhằm đối phó với các thay đổi: lên kế hoạch cho sự thay đổi, thiết kế cho sự thay đổi và xây dựng các thay đổi Phần mềm sẽ dễ dàng thích ứng với những yêu cầu mới và các thay đổi mới Các kỹ
sư phần mềm đã đi đến thống nhất rằng cách tốt nhất để đối phó với các thay đổi liên tục là xây dựng hệ thống ra các thành phần để có thể tái sử dụng phù hợp với một tiêu chuẩn và kiến trúc plug-in
- Tái sử dụng:
Một phần mềm phải cho phép tái sử dụng thiết kế và thưc hiện một việc gì
đó và phải được sử dụng lại trong những hoàn cảnh khác nhau Điều này sẽ làm tăng năng suất làm việc, cải thiện chất lượng phần mềm…
Có nhiều cấp độ khác nhau trong việc tái sử dụng phần mềm
Ví dụ:
Sao chép mã nguồn – Đây là cấp thấp nhất của việc tái sử dụng phần mềm.Xây dựng lớp thư viện các hàm, thủ tục là hình thức tốt hơn về việc tái sử dụng hơn so với việc sao chép mã nguồn nhưng không phổ biến
Các lớp thư viện này tốt hơn về việc tái sử dụng và họ đang cố gắng phổ biến
nó Tuy nhiên, vấn đề đặt ra là nó đòi hỏi sự hiểu biết trước khi các lớp có thể tái sử dụng Hơn nữa, nó chỉ hỗ trợ tái sử dụng hộp trắng Và như vậy khách hàng sẽ bị ảnh hưởng nếu cấu trúc bên trong các lớp thư viện này thay đổi
Ví dụ, trong một ngôn ngữ hướng đối tượng (OPP) như C++ hay Java, các lớp thư viện được kết hợp thực hiện với các lớp cơ sở Những thay đổi bất kỳ trong các lớp cơ sở sẽ phá vỡ kết cấu các lớp thư viện Hơn nữa mức độ tái sử dụng trong ngôn ngữ cụ thể, không thể tái sử dụng trên các ngôn ngữ khác.COP hỗ trợ cấp độ cao nhất của việc tái sử dụng phần mềm vì nó cho phép tái sử dụng bao gôm hộp trắng, hộp xám và hộp đen
Tái sử dụng hộp trắng có nghĩa là phần source code của một thành phần phầnmềm được cung cấp, được nghiên cứu, tái sử dụng, điều chỉnh hoặc sửa đổi.Tái sử dụng hộp đen được dựa trên nguyên tắc ẩn thông tin Các giao diện cụthể cho các dịch vụ người dùng có thể yêu cầu từ một thành phần Các thành phần cung cấp được thực hiện các giao dịch mà khách hàng thao tác Miễn là các giao diện này không thay đổi, các thành phần có thể được thay đổi trong nội
bộ chương trình mà không ảnh hưởng tới người dùng
Tái sử dụng hộp xám nằm giữa tái sử dụng hộp đen và tái sử dụng hộp trắng.Khi kích thước và độ phức tạp của hệ thống phần mềm tăng lên, việc xác định và quản lý phù hợp các mối liên hệ giữa các thành phần của hệ thông sẽ trởthành trọng tâm COP cung cấp một giải pháp quản lý để đối phó với sự phức tạp của phần mềm, sự thay đổi liên tục của hệ thống và các vấn đề tái sử dụng phần mềm COP là mô hình thực tế để phát triển hệ thống phần mềm lớn Ví dụ như các doanh nghiệp có quy mô lớn và nằm phân tán, các ứng dụng web và các dịch vụ web
1.2.4. Ưu và nhược điểm