Head First Object-Oriented Analysis and Design
這一本深入淺出物件導向分析設計(中文版)是最近在看的書,真的非常深入淺出,我一個下午就看了快400頁,當然像當故事這樣看很快,有時候才會對內容注意一下:
因為最近在準備SCJP所以對Attribute(屬性)跟Operation(操作)就比較注意,看了這個連連看得答案就覺有問題,我倒是認為Attribute應該是連Equivalent to a member variable in a class(等同於類別裡的成員變數),Operation是連This is the UML term that usually represents a method in one of your classes.(這是UML的術語,通常代表類別裡的方法)。
各位覺得如何?
※2022/02/13
此書已絕版,無法購買,只能從圖書館借閱,有找到【深入淺出物件導向分析與設計】第一章、偉大軟體由此開始的分享,也是用C#語言實作,或許改天可以問他看看,如果朋友有深入淺出物件導向分析與設計pdf的話,可以分享一下,謝謝!
這裡轉錄一下他紀錄的心得:
情境
客戶:Rick 的亂彈吉他店
需求:建立吉他庫存管理應用程式,並提供搜尋功能,為客戶配對心目中的理想吉他。
廠商:「低階編程」軟體公司
顧客:Erin (來到 Rick 的店尋找心目中理想的吉他)
版次:v0.1
【類別圖】

【程式碼】
Guitar.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ricksGuitars_start
{
public class Guitar
{
private string serialNumber, builder, model, type, backWood, topWood;
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;
}
public string getSerialNumber()
{
return serialNumber;
}
public double getPrice()
{
return price;
}
public void setPrice(double newPrice)
{
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;
}
}
}
Inventory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ricksGuitars_start
{
public class Inventory
{
private List<Guitar> guitars;// = new List<Guitar>();
public Inventory()
{
guitars = new List<Guitar>();
}
public void addGuitar(string serialNumber, double price, string builder, string model, string type, string backWood, string topWood)
{
guitars.Add(new Guitar(serialNumber, price, builder, model, type, backWood, topWood));
}
public Guitar getGuitar(string serialNumber)
{
return guitars.First(guitar => guitar.getSerialNumber().Equals(serialNumber));
}
public Guitar search(Guitar searchGuitart)
{
//return guitars.First(guitar => guitar.Equals(searchGuitart));
for (int i = 0; i < guitars.Count; ++i)
{
Guitar guitar = guitars[i];
string builder = searchGuitart.getBuilder();
if ((builder != null) && (!builder.Equals("")) && (!builder.Equals(guitar.getBuilder())))
{
continue;
}
string model = searchGuitart.getModel();
if ((model != null) && (!model.Equals("")) && (!model.Equals(guitar.getModel())))
{
continue;
}
string type = searchGuitart.getType();
if ((type != null) && (!type.Equals("")) && (!type.Equals(guitar.getType())))
{
continue;
}
string backWood = searchGuitart.getBackWood();
if ((backWood != null) && (!backWood.Equals("")) && (!backWood.Equals(guitar.getBackWood())))
{
continue;
}
string topWood = searchGuitart.getTopWood();
if ((topWood != null) && (!topWood.Equals("")) && (!topWood.Equals(guitar.getTopWood())))
{
continue;
}
return guitar;
}
return null;
}
}
}
Tester.cs (測試程式表單)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ricksGuitars_start
{
public partial class fmFindGuitarTester : Form
{
Inventory inventory = new Inventory();
Guitar whatErinLike = new Guitar("", 0, "fender", "Stratocastor", "electric", "Alder", "Alder");
public fmFindGuitarTester()
{
InitializeComponent();
inventory.addGuitar("V95693", 1499.95, "Fender", "Stratocastor", "electric", "Alder", "Alder");
inventory.addGuitar("V9512", 1549.95, "Fender", "Stratocastor", "electric", "Alder", "Alder");
}
private void fmFindGuitarTester_Load(object sender, EventArgs e)
{
Guitar guitar = inventory.search(whatErinLike);
string sRet = "Sorry, we have nothing for you.";
if (guitar != null)
{
sRet = "You might like this " + guitar.getBuilder() + " " + guitar.getModel() + " " +
guitar.getType() + " guitar : n" + guitar.getBackWood() + " back and sides,n" +
guitar.getTopWood() + " top.nYou can have it for only $" + guitar.getPrice().ToString() + "!";
}
tbMsg.Text = sRet;
}
}
}
【測試結果】

後面還有更多改版的資訊,可以就可以看他的文章來了解,節錄至此~
※2022/03/06 後記
現在要找到中文版的深入淺出物件導向分析與設計pdf好像不好找,如果有朋友有的話,請留言給我,謝謝!
目前各位還是可以先到圖書館去借閱
若想知道一些C#的字串函式可以參閱C# Substring 定義及七種用法


1 則留言