-
Notifications
You must be signed in to change notification settings - Fork 0
Object Oriented Design Cracking the Code Interview Study Group 9
edwardyi edited this page Jan 12, 2018
·
1 revision
>> 拿掉跑不動了
#> C++ compiler >> 執行速度 >> 執行大小(output) >>> 手機空間受限(1、2M一個考量) >> 沒有很多CPU可以用,無法concurrent(早期語言的問題)
>> 物件和類別(抽象一層裝水的容器、水瓶)
>> 不同的實體,特性和功能
>> attribute:表示特性(容量多少、顏色、大小)
>> methods(大腦認知,就直接拿來喝,這有甚麼問題嗎?直接拿來用)
>> 包裝在自己的單元裡面,從外面看不到
>> 其他資訊可能看不到(電話和名字)
>> 例如:遙控器(abilities去解釋)
>> Interface(提供那些讓外面可以互動)
>> Attribute可能外顯或隱藏屬性(不知道成本多少)
>> 切成獨立不互相影響的單元(會喝,都可以喝各種東西)
>> 出新的水壺還是可以拿來喝(Interface)
>> 一手把的門(只要知道開關就好了)
>> 符合條件就是門,Generic開或關
>> 按了開,不管是手推還是自動開
>> 繼承有些特性可以帶到子類別去的
>> 可以上鎖的門(lock或unlock功能)
>> 指紋鎖
>> 很多東西都是一層一層的
>> 一個graphic一個graphic(display和hide)
>> 方形的,視窗或按鈕(有圖有文字有按鈕的按鈕)
>> 熟悉C++可以看QT(歷史悠久,千錘百鍊)
>> 商店的管理系統(有額外的考量)
>> 百貨公司(各種折扣)、超商等級(是否可以寄杯)
>> 和真實世界的東西,互相獨立,有清楚的interface
>> 判斷關係
>>> is/in a:上下關係
>>>> 可以打字不一定是電腦
>>>> 自動門(censer、馬達)
>>>> 同一個東西解釋兩種概念(一個願望一次滿足)
>>>> 取決於design(螢幕,依照不同的情境去設計)
>>>> 不一定這麼絕對(是不是繼承觀念)
>>> has a(one-to-one)
>>>> DB的東西(connection有一定的數量)
>>> 設定attriubte和method有關係
>> 檔案系統(檔案和目錄)
>>> 相似性?
>>> 設計一個class,大class底下子類別
>> 電腦
>>> 螢幕裝置、儲存裝置(硬碟)、輸入裝置(鍵盤滑鼠)
>> 可不可以多個繼承(C#、Java)
>>> Interface多重繼承
>>> 沒有實體(只有屬性和方法)
>>> 使用的人來說只要可以看就好了(interface)
>>> 只要會看兩邊都可以進行抽換(還是要用實際的例子會比較清楚)
>> 關係變太複雜了
>> 很多人幫他寫(葉秉哲),不好入手
>> 適合有經驗的人閱讀(字典的概念,應該注意甚麼)
>> 要有足夠的經驗去看(clean code:不單是design,寫code習慣)
>> 一般的人Learning(不適合寫過幾年的人,變成教條)
>> 用說故事的方式去連結(西門慶)
>> 對岸出的(OO使用)
>> 重構對初學者太難了
>> 不會去生出第二個實體
>> 某些東西希望只有一個個體
>> 有其他變形可以參考
>> 透過工廠生出物件
>> 不是自己去new(重複使用的東西可以運用)
>> 檔案總管視窗(視窗物件,經常要生出一些區塊、排序也不用自己在寫)
>> 只要給參數就會自動產生(open、close handle)
>> 只要說要甚麼口味,機器自己會調配出來,你要的東西
>> lazy loading?(想聽忘記問了XD)
>> 把別人要我們做的委派給真正要做的人
>> framework只要叫別人show出來就好了(自己畫東西出來)
>> 挺複雜的,跳過
>> 有空的時候翻過一遍
>> 不一定面試的時候可以派上用場
>> 比較困難碰到,coding重複性高,attribute(分類方式?)
>> 比較少是嗎?(領域的關係)
>> 書就像是一本目錄而已(一個產業碰到所有東西是很困難)
>> 可以用來改善現有程式,或用到新的desigin(反覆遇到相同的pattern是很正常的)
>> 因為領域相同,自己偷偷改code(自己重新改過)
>> 不能偷偷改,要有review(這種東西怎麼會過?)
>> 一群人昏頭(修以前的bug修不完)
>> 總要有人維持
>> 目錄和檔案(現代系統)
>> 視為同樣的東西(可以Open/close/data/write/read)
>> 檔案data(代表目錄的file)
>> 加新的目錄(Linux)
>> 各種屬性(隱藏或是其他,access right)
>>> 有目錄的屬性就是目錄
>> Link
>>> link data指向的東西(一種Interface代表不同的東西)
>> Memory
>>> 指向哪一塊Memory(對應記憶體)
>> 簡化後只需要用到一種Interface
>> 主要class(game、board、chess、player)
>> 看一下個別的東西是否足夠的獨立(關係可以切開來)
>> 不會有互相參考的狀況(夠乾淨)
>> 棋盤是平的,這樣就可以玩了(in a)
>> 一場game兩個人、64個旗子(一些旗子)
>> factory(傳兩個player進去就可以開始玩了)
>>> 把關係決定了(初始化)
>>> support那些method(new game)
>>> 可以屬於board也可以屬於game(沒有絕對答案)
>>> user只要看到game(public/private)
>>> delegate board去做事(分別做甚麼事情)
>>> 封裝(不需要傳board進來,讓外面的人可以修改)
>>> board下棋子(自己控制好就好了)
>> 狀態和實體分開可以減少記憶體的用量
>>> 分別下到甚麼狀態
>>> 保存或切開(board放到資料庫中)
>>> 可以Save遊戲(不同game之間)
>>> code邏輯一樣
>>> 樣板方法?(State和Object切開)
>>> 單獨做成一個object(save and load這個Object)
>>> 東西可以分別切開(前後端可以切開,分別升級)
>>> interface(可以seperate不同東西)
>>> 棋盤有一個array可以放,保存board的狀態
>>> 把不變和會變的東西抽開(前後層)
>>> 資料庫(後端)
>>> configuaration變成一個file(在抽象化一次)
>>> save/load configuartion
>> 檔案不在就去download
>>> 雲端(本機)
>> 對外面的人不知道
>>> 實際已經call到不同人身上了
>>> strategy(排序、quick/bubble sort、sorter interface)
>>> 追加sorter在另外定義
>> IOT state
>>> 放DB,SQL(前端service就是負責運作)
>>> 不存任何state,只做operation
>>> 重開,scalable(momemto)
>>> 東西的狀態和實體切開就可以保存了(可以serialize存下來)
>>> 設計沒有考慮就比較麻煩(避免以後麻煩,解決眼前問題沒那麼難,很多東西都可以達成)
>>> desigin不好的東西就有感覺
>> 甚麼時候使用重構(半年/一年)
>>> 想加新東西加不進去,技術債,不趕快還就會越來越難處理
>>> 不見得每個人,變比較彈性