Bạn đang viết một chương trình Tetris trong Java. Làm thế nào bạn sẽ thiết lập thiết kế lớp học của bạn liên quan đến các khía cạnh sau đây?Câu hỏi thiết kế triết học cho OOP-Tetris
- lớp Piece: Có một
Piece
lớp, với một mảng nội bộ mà quyết định hình dạng của các mảnh, so với có bảyPiece
lớp học, một cho mỗi miếng. Chúng là tất cả các lớp con của một lớp Piece chung. - đại diện lớp Piece: Có một mảng của 4 trường hợp của
Block
, đại diện cho một hình vuông của một mảnh, và mỗiBlock
chứa vị trí của nó trên Board (trong tọa độ đồ họa) so với việc có một mảng 4x4 nơinull
có nghĩa là không có khối, và vị trí được xác định bởi hình dạng của mảng. - Location: Mỗi
Block
trong mảngPiece
hoặc trên mảngBoard
lưu trữ vị trí của nó so với cácPiece
vàBoard
biết vị trí của cácBlocks
mà bao gồm họ. - Tạo một Piece: Có một phương pháp tĩnh của lớp mảnh
getRandomPiece
, hoặc có mộtPieceFactory
mà bạn thực hiện một ví dụ về điều đó có phương phápgenRandomPiece
trên ví dụ. - Thao tác các mảnh hiện tại: Sử dụng mô hình
Proxy
, do đó tất cả những gì cần truy cập vào nó chỉ sử dụng các proxy, hoặc có một phương phápgetCurrentPiece
trên lớpBoard
và gọi đó là bất cứ lúc nào bạn muốn làm điều gì đó với hiện tại cái.
Đây không phải là bài tập về nhà. Tôi chỉ mâu thuẫn với những gì khóa học CS giới thiệu giảng dạy tại trường đại học của tôi và tôi muốn xem những gì mọi người nói chung tin tưởng. Điều gì sẽ được cho là thiết kế OOP "tốt"? Bỏ qua thực tế là nó cho một khóa học giới thiệu - làm thế nào để bạn làm điều đó?
phải là cộng đồng wiki – Malfist
Tất cả các lớp và nội dung này ... có thể khiến cho vấn đề quá trừu tượng đối với những gì nó thực sự là. Nhiều cách khác nhau để biểu diễn các phần tetris (http://stackoverflow.com/questions/233850/tetris-piece-rotation-algorithm) và nhiều cách khác nhau để thao tác chúng. Nếu nó cho một khóa học * giới thiệu * tôi sẽ không lo lắng về OOP. Chỉ cần ý kiến của tôi, không phải là một câu trả lời thực sự cho câu hỏi của bạn. –
@roygbiv: đăng nhận xét này làm câu trả lời! Tôi nghĩ bạn ít nhất sẽ có một hoặc hai lớp học – Claudiu