[Java1_15] Luyện Tập OOP Composition - Code Lean

Bài đăng nổi bật

Học Ngành Gì KHÔNG THẤT NGHIỆP

13:22 Trang chủJava1 [Java1_15] Luyện Tập OOP Composition 11:57 0 Nhận xét

2. Luyện tập về OOP Composition

2.1 Ex: Ví dụ về hai class AuthorBook (Giới thiệu về OOP Composition)

Bài tập đầu tiên này sẽ dẫn bạn qua tất cả các khái niệm liên quan đến Thành phần OOP (OOP Composition) ExerciseOOP_Author.png Một lớp được gọi Author (như thể hiện trong sơ đồ lớp) được thiết kế để mô hình hóa tác giả của một cuốn sách. Nó chứa:
  • Ba biến private đối tượng: name( String), email( String) và gender( char của một trong hai 'm'hoặc 'f');
  • Một constructor để khởi tạo name, emailgendervới các giá trị nhất định;
  • public Author (String name, String email, char gender) {......}
  • (Không có hàm tạo mặc định cho Tác giả, vì không có mặc định cho tên, email và giới tính.)
  • public getters / setters: getName(), getEmail(), setEmail(), và getGender();(Không có setters cho namegender, vì những thuộc tính này không thể thay đổi.)
  • Một toString()phương thức trả về " Author[name=?,email=?,gender=?]", ví dụ: " Author[name=Tan Ah Teck,[email protected],gender=m]".
Viết lớp Author. Đồng thời viết trình điều khiển thử nghiệm được gọi TestAuthor để kiểm tra tất cả các public phương thức, ví dụ: Author codeLean = new Author("Code Lean", "[email protected]", 'm'); // Test the constructor System.out.println(codeLean); // Test toString() codeLean.setEmail("[email protected]"); // Test setter System.out.println("name is: " + codeLean.getName()); // Test getter System.out.println("eamil is: " + codeLean.getEmail()); // Test getter System.out.println("gender is: " + codeLean.getGender()); // Test gExercise ExerciseOOP_Book.png Class Book được thiết kế (như hiển thị trên class diagram) để mô hình hoá một cuốn sách được viết bởi một tác giả one author. Nó chứa:
  • Bốn private instance variables: name (String), author (của class Author mà bạn vừa tạo, lưu ý rằng trong trường hợp này thì mỗi cuốn sách có một và chỉ một tác giả), price(double), và qty (int);
  • Hai hàm tạo (constructor):
  • public Book (String name, Author author, double price) { ...... } public Book (String name, Author author, double price, int qty) { ...... }
  • public methods getName(), getAuthor(), getPrice(), setPrice(), getQty(), setQty().
  • Phương thức toString() sẽ trả về "Book[name=?,Author[name=?,email=?,gender=?],price=?,qty=?". Bạn có thể tái sử dụng Author’s toString().
Để viết một class Book (có sử dụng class Author được viết trước đó). Đồng thời cũng viết test driver TestBook để test tất cả các method public trong class Book. Chú ý rằng Book phải có constructor của một instance của lớpAuthor trước khi bạn có instance của constructor của Book. E.g., // Construct an author instance Author codeLean = new Author("Code Lean", "[email protected]", 'f'); System.out.println(codeLean); // Author's toString() Book dummyBook = new Book("Java for dummy", codeLean, 19.95, 99); // Test Book's Constructor System.out.println(dummyBook); // Test Book's toString() // Test Getters and Setters dummyBook.setPrice(29.95); dummyBook.setQty(28); System.out.println("name is: " + dummyBook.getName()); System.out.println("price is: " + dummyBook.getPrice()); System.out.println("qty is: " + dummyBook.getQty()); System.out.println("Author is: " + dummyBook.getAuthor()); // Author's toString() System.out.println("Author's name is: " + dummyBook.getAuthor().getName()); System.out.println("Author's email is: " + dummyBook.getAuthor().getEmail()); // Use an anonymous instance of Author to construct a Book instance Book anotherBook = new Book("more Java", new Author("Dang Kim Thi", "[email protected]", 'f'), 29.95); System.out.println(anotherBook); // toString() Hãy lưu ý rằng cả hai lớp Book Author có một biến được gọi là name. Tuy nhiên, nó có thể được phân biệt thông qua thể hiện tham chiếu. Ví dụ BookaBook, aBook.name đề cập đến name cuốn sách; trong khi đó Author, ví dụ của một tác giả auAuthor, anAuthor.name đề cập đến name tác giả. Không nên đặt tên biến là bookName authorName. THỬ:
  1. In ra name email của tác giả từ một Book nào đó. (Gợi ý : aBook.getAuthor().getName(), aBook.getAuthor().getEmail()).
  2. Giới thiệu các phương pháp mới gọi getAuthorName(), getAuthorEmail(), getAuthorGender()trong lớp Book để trả lại name, email gender các tác giả của cuốn sách. Ví dụ,
  1. public String getAuthorName() { return author.getName(); // cannot use author.name as name is private in Author class }

2.2 Luyện Tập (Nâng Cao): BookAuthor

Tiếp tục luyện về Class - trong đó Một mảng của đối tượng coi như một Instance Variable

ExerciseOOP_BookAuthorAgain.png

Trong bài tập trước , một cuốn sách được viết bởi một và chỉ một tác giả. Trong thực tế, một cuốn sách có thể được viết bởi một hoặc nhiều tác giả. Sửa đổi lớp Book để hỗ trợ một hoặc nhiều tác giả bằng cách thay đổi biến authors thể hiện thành một biến thành một Author mảng. Ghi chú:
  • Các constructor lấy một mảng Author(ví dụ, Author[]), thay vì một Author thể hiện. Trong thiết kế này, một khi một Book thể hiện là hàm tạo, bạn không thể thêm hoặc xóa tác giả.
  • Các toString()phương pháp sẽ trở lại " Book[name=?,authors={Author[name=?,email=?,gender=?],......},price=?,qty=?]".
Bạn được yêu cầu:
  1. Viết mã cho class Book. Bạn sẽ sử dụng lại các class Author được viết trước đó.
  2. Viết trình test driver (được gọi TestBook) để kiểm tra lớp Book.
Gợi ý : // Declare and allocate an array of Authors Author[] authors = new Author[2]; authors[0] = new Author("Tan Ah Teck", "[email protected]", 'm'); authors[1] = new Author("Paul Tan", "[email protected]", 'm'); // Declare and allocate a Book instance Book javaDummy = new Book("Java for Dummy", authors, 19.99, 99); System.out.println(javaDummy); // toString()

2.3 Ex: MyPoint Class

ExerciseOOP_MyPoint.png Một lớp được gọi MyPoint, mô hình điểm 2D x y tọa độ, được thiết kế như thể hiện trong sơ đồ lớp. Nó chứa:
  • Hai biến đối tượng x( int) và y( int).
  • Hàm tạo mặc định (hoặc "không đối số") xây dựng một điểm tại vị trí mặc định của (0, 0).
  • Một hàm tạo quá tải xây dựng một điểm với các tọa độ xytọa độ đã cho.
  • Getter và setter cho các biến thể hiện x biến thể hiện y .
  • Một phương pháp setXY()để đặt cả hai x y.
  • Một phương thức getXY()trả về x và y trong intmảng 2 phần tử .
  • Một toString()phương thức trả về một mô tả chuỗi của thể hiện ở định dạng " ".(x, y)
  • Một phương thức được gọi là distance(int x, int y)trả về khoảng cách từ điểm này tới điểm khác tại toạ điển đã cho(x, y), ví dụ
  • MyPoint p1 = new MyPoint(3, 4); System.out.println(p1.distance(5, 6));
  • Một ví dụ khác về gọi hàm tính khoảng cách, trong trường hợp này thì x,y của điểm 2 là (5,6)MyPoint p1 = new MyPoint(3, 4); MyPoint p2 = new MyPoint(5, 6); System.out.println(p1.distance(p2));
  • Một ví dụ khác nữa về tính khoảng cách, trong trường hợp này thì x,y của điểm 2 là (0,0)MyPoint p1 = new MyPoint(3, 4); System.out.println(p1.distance());
Bạn được yêu cầu:
  1. Viết mã cho lớp MyPoint. Cũng viết một chương trình thử nghiệm (được gọi TestMyPoint) để kiểm tra tất cả các phương thức được định nghĩa trong lớp.Gợi ý:
  1. // Overloading method distance() // This version takes two ints as arguments public double distance(int x, int y) { int xDiff = this.x – x; int yDiff = ...... return Math.sqrt(xDiff*xDiff + yDiff*yDiff); } // This version takes a MyPoint instance as argument public double distance(MyPoint another) { int xDiff = this.x – another.x; ....... } // Test program to test all constructors and public methods MyPoint p1 = new MyPoint(); // Test constructor System.out.println(p1); // Test toString() p1.setX(8); // Test setters p1.setY(6); System.out.println("x is: " + p1.getX()); // Test getters System.out.println("y is: " + p1.getY()); p1.setXY(3, 0); // Test setXY() System.out.println(p1.getXY()[0]); // Test getXY() System.out.println(p1.getXY()[1]); System.out.println(p1); MyPoint p2 = new MyPoint(0, 4); // Test another constructor System.out.println(p2); // Testing the overloaded methods distance() System.out.println(p1.distance(p2)); // which version? System.out.println(p2.distance(p1)); // which version? System.out.println(p1.distance(5, 6)); // which version? System.out.println(p1.distance()); // which version?
  2. Viết một chương trình định vị 10 điểm trong một mảng của MyPoint, và khởi (1, 1), (2, 2)... (10, 10).Gợi ý : Bạn cần phân bổ mảng, cũng như mỗi trong số 10 MyPoint instance. Nói cách khác, bạn cần phát hành 11 new, 1 cho mảng và 10 cho các MyPoint instance. Write a program that allocates 10 points in an array of MyPoint, and initializes to (1, 1), (2, 2), ... (10, 10).Hints: You need to allocate the array, as well as each of the 10 MyPoint instances. In other words, you need to issue 11 new, 1 for the array and 10 for the MyPoint instances.
  3. MyPoint[] points = new MyPoint[10]; // Declare and allocate an array of MyPoint for (int i = 0; i < points.length; i++) { points[i] = new MyPoint(...); // Allocate each of MyPoint instances } // use a loop to print all the points

2.4 Ex: Lớp MyCircleMyPoint

ExerciseOOP_MyCircle.png Một lớp được gọi MyCircle, mô hình một vòng tròn với a center (x,y)và a radius, được thiết kế như thể hiện trong sơ đồ lớp. Các MyCircle sử dụng một thể hiện của MyPoint (được tạo trong bài tập trước) như nó center. Lớp chứa:
  • Hai biến đối tượng private: center(một thể hiện của MyPoint) và radius( int).
  • Một hàm tạo xây dựng một vòng tròn với tâm ( x, y) và radius.
  • Một hàm tạo quá tải xây dựng một thể hiện đã MyCirclecho MyPointcenterradius.
  • Một constructor mặc định xây dựng một vòng tròn có tâm tại (0,0)và bán kính của 1.
  • Getters và setters khác nhau.
  • Một toString()phương thức trả về một mô tả chuỗi của thể hiện này ở định dạng " ". Bạn sẽ tái sử dụng của .MyCircle[radius=r,center=(x,y)]toString()MyPoint
  • getArea()getCircumference()các phương thức trả về diện tích và chu vi của thisvòng tròn trong double.
  • Một distance(MyCircle another)phương thức trả về khoảng cách của các trung tâm từ thisthể hiện và thể hiện đã cho MyCircle. Bạn nên sử dụng MyPoint's distance()phương pháp để tính toán khoảng cách này.
Viết MyCirclelớp. Cũng viết một trình điều khiển thử nghiệm (được gọi TestMyCircle) để kiểm tra tất cả các phương thức công khai được định nghĩa trong lớp. Gợi ý : // Constructors public MyCircle(int x, int y, int radius) { // Need to construct an instance of MyPoint for the variable center center = new MyPoint(x, y); this.radius = radius; } public MyCircle(MyPoint center, int radius) { // An instance of MyPoint already constructed by caller; simply assign. this.center = center; ...... } public MyCircle() { center = new MyPoint(.....); // construct MyPoint instance this.radius = ...... } // Returns the x-coordinate of the center of this MyCircle public int getCenterX() { return center.getX(); // cannot use center.x and x is private in MyPoint } // Returns the distance of the center for this MyCircle and another MyCircle public double distance(MyCircle another) { return center.distance(another.center); // use distance() of MyPoint }

2.5 Ex: The MyTriangle and MyPoint Classes

ExerciseOOP_MyTriangle.png Một lớp được gọi MyTriangle, mô hình một tam giác có 3 đỉnh, được thiết kế như hình. Các MyTrianglelớp học sử dụng ba MyPointtrường hợp (được tạo trong việc thực hiện trước đó) là ba đỉnh của nó. Nó chứa:
  • Ba privatebiến Ví dụ v1, v2, v3(trường hợp MyPoint), cho ba đỉnh.
  • Một nhà xây dựng mà xây dựng một MyTrianglevới ba bộ tọa độ, v1=(x1, y1), v2=(x2, y2), v3=(x3, y3).
  • Một constructor quá tải xây dựng MyTriangle với 3 đối tượng MyPoint.
  • Một toString()phương thức trả về một mô tả chuỗi của thể hiện ở định dạng " ".MyTriangle[v1=(x1,y1),v2=(x2,y2),v3=(x3,y3)]
  • Một getPerimeter()phương thức trả về độ dài của chu vi. Bạn nên sử dụng distance()phương pháp chu phương pháp MyPoint để tính toán chu vi.
  • Một phương thức printType()in " equilateral" nếu tất cả ba cạnh bằng nhau ", isosceles" nếu bất kỳ hai trong ba cạnh bằng nhau hoặc " scalene" nếu ba cạnh khác nhau.
Viết class MyTriangle. Cũng viết một trình điều khiển thử nghiệm (được gọi TestMyTriangle) để kiểm tra tất cả các phương thức được định nghĩa trong lớp.

2.6 Ex: The MyRectangle and MyPoint Classes

Thiết kế một MyRectanglelớp bao gồm hai thiết kế bao gồm haiMyPoint trường hợp là các góc trên cùng bên tráidưới cùng bên phải của nó . Vẽ sơ đồ lớp, viết mã và viết trình điều khiển kiểm tra.

2.7 Ex: The Customer and Invoice classes

ExerciseOOP_Customer.png Các Customermô hình lớp khách hàng được thiết kế như thể hiện trong sơ đồ lớp. Viết mã cho Customerlớp và trình điều khiển kiểm tra để kiểm tra tất cả các publicphương thức. ExerciseOOP_Invoice.png Các Invoicelớp, thiết kế như thể hiện trong sơ đồ lớp, soạn một Customerví dụ (bằng văn bản trước đó) là thành viên của nó. Viết mã cho Invoicelớp và trình điều khiển kiểm tra để kiểm tra tất cả các publicphương thức.

2.8 Ex: The Customer and Account classes

ExerciseOOP_CustomerAccount.png Các Customermô hình lớp khách hàng được thiết kế như thể hiện trong sơ đồ lớp. Viết mã cho Customerlớp và trình điều khiển kiểm tra để kiểm tra tất cả các publicphương thức. ExerciseOOP_AccountCustomer.png Các Accountmô hình lớp một tài khoản ngân hàng, thiết kế như thể hiện trong sơ đồ lớp, soạn một Customerví dụ (bằng văn bản trước đó) là thành viên của nó. Viết mã cho Accountlớp và trình điều khiển kiểm tra để kiểm tra tất cả các publicphương thức. Tags Java1 JavaCore

You might like

Hiện thêm

Post a Comment

Đăng nhận xét

Mới hơn Cũ hơn

Follow Us

Chủ Đề Tôi Quan Tâm ;)

  • .Net
  • .net core
  • Agile
  • AI
  • AngularJS
  • Anroid
  • AP
  • Azure
  • BDW
  • Bootstrap
  • c
  • C#
  • Cấu Trúc Dữ Liệu và Giải Thuật
  • CodeLean
  • CSDL
  • CSS
  • Database
  • Design Pattern
  • DesignThinking
  • DevOps
  • Docker
  • Git
  • github
  • HTML
  • Hướng_Nghiệp
  • Index
  • ISA
  • Java
  • Java1
  • Java2
  • JavaAdvanced
  • JavaCore
  • JavaScript
  • JSP & Servlet
  • Laravel Framework
  • Laravel9
  • Lập trình C
  • Lập trình cho trẻ
  • LINQ
  • MLJ
  • MySQL
  • NodeJS
  • OOAD
  • PHP
  • Programming
  • Python
  • QA
  • React Native
  • Review Sách
  • Spring Boot
  • Spring Framework
  • SQL
  • Teaching
  • Test
  • Thiết Kế Website
  • Tools
  • TypeScript
  • Web Development
  • WebAPI

Most Popular

Chuẩn hoá dữ liệu là gì? 1NF, 2NF, 3NF & BCNF với các ví dụ

11:57

[MySQL 05] Mô hình ER là gì và ví dụ

12:08

Tìm Phủ Tối thiểu của một Hàm

12:29

Xác định khóa, Tìm phủ tối thiểu, Chuẩn hóa dữ liệu

16:36

Big O: Cách tính độ phức tạp của thời gian và không gian

16:37

Bắt đầu học Node.js với Visual Studio Code

10:07

[Web API] Hướng dẫn từ cơ bản tới nâng cao Web API ASP.NET

19:21

[MySQL 02] Hướng dẫn sử dụng MySQL Workbench

11:32

Hướng dẫn sửa cấu hình để chạy Dự Án Laravel từ Source Code có sẵn

14:59

[JSP & Servlet] Tạo Web Application JSP Servlet Sử dụng JSTL với Tomcat 10 trên IntelliJ

21:27

Biểu mẫu liên hệ

Từ khóa » Viết Chương Trình Java Theo Cho Bài Book Và Author Biết Rằng Mỗi Book được Viết Bởi Nhiều Author