YOMEDIA
ADSENSE
Bài giảng Object-Oriented Analysis and Design - Phân tích thiết kế hướng đối tượng
180
lượt xem 15
download
lượt xem 15
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Bài giảng Object-Oriented Analysis and Design - Phân tích thiết kế hướng đối tượng được biên soạn nhằm giúp cho các bạn có thể phát triển phần mềm với thiết kế tốt; biết cách sử dụng các kĩ thuật hướng đối tượng đã được kiểm chứng; phát triển kỹ năng lập trình;... Mời các bạn tham khảo.
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Object-Oriented Analysis and Design - Phân tích thiết kế hướng đối tượng
- Object-Oriented Analysis and Design Phân tích thiết kế hướng đối tượng Con đường đến thiết kế tốt Chỉnh từ bài giảng của Ron Mak www.cs.sjsu.edu/~mak
- Mục tiêu môn học Trở thành lập trình viên giỏi hơn. Phát triển phần mềm với thiết kế tốt thực hiện đúng việc nó cần làm ... ... và có tính mềm dẻo, đáng tin cậy, và bảo trì được. Sử dụng các kĩ thuật hướng đối tượng đã được kiểm chứng. Học các kĩ năng chuyên nghiệp quan trọng. Làm việc trong một đội lập trình nhỏ. Lấy kinh nghiệm về cách cộng tác và phối hợp với nhau để thiết kế, phát triển, và test ứng dụng. Áp dụng các cách làm việc theo chuẩn công nghiệp hiện đại. _ SJSU Dept. of Computer Science CS 151: Object-Oriented Design 2 Fall 2013: August 22 © R. Mak
- Tài liệu học Website http://uet.vnu.edu.vn/~chauttm/ooad2014/ Lịch học, thông báo Bài giảng và tài liệu đọc thêm Bài tập lớn Giáo trình: Giáo trình Phân tích thiết kế hướng đối tượng của Trương Ninh Thuận, Đặng Đức Hạnh Object-Oriented Design & Patterns, 2nd edition by Cay Horstmann Head First Object-Oriented Analysis & Design, by Brett D. McLaughlin, et al. _ SJSU Dept. of Computer Science CS 151: Object-Oriented Design 3 Fall 2013: August 22 © R. Mak
- Giới thiệu nội dung môn học First half Journey to good design Object-oriented design process Guidelines for class design Interface types and polymorphism Midterm Second half Patterns and GUI programming Inheritance and abstract classes The Java object model Frameworks Multithreaded programming Final SJSU Dept. of Computer Science CS 151: Object-Oriented Design 4 Fall 2013: August 22 © R. Mak
- Nhóm bài tập lớn Bài tập lớn sẽ được làm theo nhóm. Mỗi nhóm gồm 4 sinh viên. Đăng kí tại link ở website môn học Hạn cuối: Thứ Ba, 18/2 Mỗi người tự chịu trách nhiệm cho việc tham gia công việc của nhóm, và cho việc hiểu tất cả các phần của bài tập, kể cả những phần không tham gia. 5
- Điểm 60% bài tập lớn – lấy điểm cuối kì (nhóm tự cho điểm theo điểm trung bình cả nhóm do giáo viên chấm) 10% kiểm tra hàng tuần (cá nhân) 20% điểm thi giữa kì (cá nhân) 10% điểm thực hành (cá nhân) Việc đi học đều và học chăm là quan trọng! Nghỉ từ 03 buổi trở lên có thể bị cấm thi. Nghỉ buổi nào thì nhận 0 điểm bài kiểm tra buổi đó Ít tham gia công việc của nhóm bài tập lớn thì sẽ chỉ nhận phần điểm nhỏ trong tổng điểm của cả nhóm. Không tham gia nhóm bài tập lớn thì nghiễm nhiên không có điểm thi cuối kì 6
- Phần mềm như thế nào gọi là tốt? Nó làm đúng việc cần làm. Nó được thiết kế tốt. Đáng tin cậy - reliable Vững mạnh - robust Mềm dẻo - flexible Kiến trúc hướng đối tượng? Sử dụng mẫu thiết kế? Dễ sửa và bảo trì. Mọi thứ luôn luôn thay đổi! _ SJSU Dept. of Computer Science CS 151: Object-Oriented Design 7 Fall 2013: August 22 © R. Mak
- Làm thế nào để có “Thiết kế tốt”? Không có công thức. Học nhiều công cụ và kĩ thuật hướng đối tượng không đủ để cho ta thiết kế tốt. Việc sử dụng mẫu thiết kế không đủ để cho ta thiết kế tốt. Đối với các ứng dụng không tầm thường, thiết kế tốt không phải đơn giản mà có được. Thiết kế tốt là cái đích đạt đến sau một hành trình. Mỗi lập trình viên phải đi qua hành trình này cho mỗi ứng dụng. Hành trình của lập trình viên ít kinh nghiệm có thể dài hơn: Xuất phát sai Đi lòng vòng Sai đường SJSU Dept. ofQuay Computerlui Science CS 151: Object-Oriented Design 8 _ Fall 2013: August 22 © R. Mak
- Nó là một quá trình lặp đi lặp lại Achieving good design is an iterative process. Khi ta phát triển ứng dụng, ta sẽ sửa thiết kế vài lần. Ngay cả những lập trình viên giỏi nhất cũng không thể lần nào cũng lập tức nghĩ ra thiết kế hoàn hảo. Hành trình đi đến thiết kế tốt đòi hỏi ta sửa sai, tinh chỉnh, và cải tiến suốt dọc đường. Khi ta có thêm kinh nghiệm, hành trình sẽ ngắn hơn. Practice, practice, practice. Học các công cụ và kĩ thuật hướng đối tượng. Học cách sử dụng mẫu thiết kế. More practice, practice, practice. _ SJSU Dept. of Computer Science CS 151: Object-Oriented Design 9 Fall 2013: August 22 © R. Mak
- Một thiết kế tồi không nhất thiết là thất bại ... ... nếu nó nhanh chóng dẫn đến một thiết kế tốt hơn. Đừng cố nghĩ ra thiết hế hoàn hảo ngay từ đầu. Mục tiêu: Sớm nhận ra thiết kế tồi trong khi phát triển và bắt đầu cải tiến từng bước càng sớm càng tốt. Even better: Cố đừng bắt đầu với một thiết kế cực tồi. Ta sẽ nhanh chóng học cách không tạo ra thiết kế tồi! _ SJSU Dept. of Computer Science CS 151: Object-Oriented Design 10 Fall 2013: August 22 © R. Mak
- Example: Rick’s Guitars Inventory Management Application for Rick’s Guitars Ứng dụng quản lý bán hàng Maintain a guitar inventory. Quản lý kho Locate guitars for customers. Tìm ghi-ta cho khách hàng UML class diagrams From: Head First Object-Oriented Analysis & Design, O’Reilly, 2006. SJSU Dept. of Computer Science CS 151: Object-Oriented Design 11 Fall 2013: August 22 © R. Mak
- The Guitar Class public class Guitar { private String serialNumber, builder, model, type, Why backWood, topWood; private? private double price; public Guitar(String serialNumber, double price, String builder, String model, String type, String backWood, String topWood) { this.serialNumber = serialNumber; this.price = price; this.builder = builder; this.model = model; this.type = type; this.backWood = backWood; this.topWood = topWood; } ... SJSU Dept. of Computer Science CS 151: Object-Oriented Design 12 Fall 2013: August 22 © R. Mak
- The Guitar Class, cont’d ... public String getSerialNumber() {return serialNumber;} public double getPrice() {return price;} public void setPrice(float newPrice) { this.price = newPrice; } public String getBuilder() {return builder;} public String getModel() {return model;} public String getType() {return type;} public String getBackWood() {return backWood;} public String getTopWood() {return topWood;} } SJSU Dept. of Computer Science CS 151: Object-Oriented Design 13 Fall 2013: August 22 © R. Mak
- The Inventory Class public class Inventory { private List guitars; public Inventory() { guitars = new LinkedList(); } public void addGuitar(String serialNumber, double price, String builder, String model, String type, String backWood, String topWood) { Guitar guitar = new Guitar(serialNumber, price, builder, model, type, backWood, topWood); guitars.add(guitar); } ... SJSU Dept. of Computer Science CS 151: Object-Oriented Design 14 Fall 2013: August 22 © R. Mak }
- The Inventory Class, cont’d public Guitar getGuitar(String serialNumber) { for (Iterator iter = guitars.iterator(); iter.hasNext(); ) { Guitar guitar = (Guitar) iter.next(); if (guitar.getSerialNumber().equals(serialNumber)) { return guitar; } } return null; } SJSU Dept. of Computer Science CS 151: Object-Oriented Design 15 Fall 2013: August 22 © R. Mak
- The Inventory Class, cont’d public Guitar search(Guitar searchGuitar) { for (Iterator iter = guitars.iterator(); iter.hasNext(); ) { Guitar guitar = (Guitar) iter.next(); String builder = searchGuitar.getBuilder(); if ((builder != null) && (!builder.equals("")) && (!builder.equals(guitar.getBuilder()))) continue; String model = searchGuitar.getModel(); if ((model != null) && (!model.equals("")) && (!model.equals(guitar.getModel()))) continue; String type = searchGuitar.getType(); if ((type != null) && (!searchGuitar.equals("")) && (!type.equals(guitar.getType()))) continue; String backWood = searchGuitar.getBackWood(); if ((backWood != null) && (!backWood.equals("")) && (!backWood.equals(guitar.getBackWood()))) continue; String topWood = searchGuitar.getTopWood(); if ((topWood != null) && (!topWood.equals("")) && (!topWood.equals(guitar.getTopWood()))) continue; return guitar; } return null; } SJSU Dept. of Computer Science CS 151: Object-Oriented Design 16 Fall 2013: August 22 © R. Mak
- The Inventory Class, cont’d public Guitar search(Guitar searchGuitar) { for (Iterator iter = guitars.iterator(); iter.hasNext(); ) { Guitar guitar = (Guitar) iter.next(); String builder = searchGuitar.getBuilder(); if ((builder != null) && (!builder.equals("")) && (!builder.equals(guitar.getBuilder()))) continue; String model = searchGuitar.getModel(); if ((model != null) && (!model.equals("")) && (!model.equals(guitar.getModel()))) continue; String type = searchGuitar.getType(); if ((type != null) && (!searchGuitar.equals("")) && (!type.equals(guitar.getType()))) continue; String backWood = searchGuitar.getBackWood(); if ((backWood != null) && (!backWood.equals("")) && (!backWood.equals(guitar.getBackWood()))) continue; String topWood = searchGuitar.getTopWood(); if ((topWood != null) && (!topWood.equals("")) && (!topWood.equals(guitar.getTopWood()))) continue; return guitar; } return null; } SJSU Dept. of Computer Science CS 151: Object-Oriented Design 17 Fall 2013: August 22 © R. Mak
- Problems! Case-sensitive string comparisons. So sánh string không bỏ qua viết hoa viết thường Make them case insensitive. Badly used string fields. Sử dụng string là không phù hợp Replace them with enumerated types. Assumes at most only one guitar match. Giả thiết là chỉ tìm thấy nhiều nhất 01 ghi-ta Return a list of matching guitars. _ SJSU Dept. of Computer Science CS 151: Object-Oriented Design 18 Fall 2013: August 22 © R. Mak
- Iteration #1: Remove String Fields public class Guitar { private String serialNumber, model; private double price; private Builder builder; private Type type; private Wood backWood, topWood; … public enum Type { ACOUSTIC("acoustic"), ELECTRIC("electric"), UNSPECIFIED("unspecified"); String value; Why private? private Type(String value) {this.value = value;} public String toString() {return value;} } SJSU Dept. of Computer Science CS 151: Object-Oriented Design 19 Fall 2013: August 22 © R. Mak
- Iteration #2: Return Multiple Matching Guitars public List search(Guitar searchGuitar) { List matchingGuitars = new LinkedList(); for (Iterator iter = guitars.iterator(); iter.hasNext(); ) { Guitar guitar = (Guitar) iter.next(); // Ignore serial number since that's unique. // Ignore price since that's unique. if (searchGuitar.getBuilder() != guitar.getBuilder()) continue; String model = searchGuitar.getModel().toLowerCase(); if ((model != null) && (!model.equals("")) && (!model.equals(guitar.getModel().toLowerCase()))) continue; if (searchGuitar.getType() != guitar.getType()) continue; if (searchGuitar.getBackWood() != guitar.getBackWood()) continue; if (searchGuitar.getTopWood() != guitar.getTopWood()) continue; matchingGuitars.add(guitar); } return SJSU matchingGuitars; Dept. of Computer Science CS 151: Object-Oriented Design 20 } Fall 2013: August 22 © R. Mak
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn