2015-01-14 62 views
3

我正在研究一個對象,該對象建議可能的方法分類。尋找推斷選擇器分類的方法

到目前爲止,我已經實現了以下策略:

  1. 相同的選擇的本地分類(即,在同一層次上下)
  2. 在其他類別相同的選擇的其他分類(分類通過頻率)
  3. 存取檢測(是該方法的設置器或吸氣劑?ifTrue: [^#accessing]
  4. 已知選擇前綴(#IS ...,#PRINT ...,#as ...等)

,並且如果所有上述的失敗(即,建議是空的):

  • 類別下的方法(僅在該方法的類理解的那些發送的其他消息,並超類)
  • 我還有其他已知的啓發式嗎?

    --- --- EDIT

  • 從相同類只發送選擇器 - > #private(@Carlos E.鐵)

  • 已知選擇(#= #hash等 - > #comparing等)

  • 空類別(如果一類是空的機會是用戶剛添加它用於下一個選擇器進行分類。)

  • +0

    我們在哪裏可以找到你的'SelectorClassifierAssistant'? – MartinW

    +0

    這是一個非常有趣的問題。你的清單看起來不錯。讓我們張貼您的發現。我對自動分類沒有太大的興趣,但我很樂意閱讀風格指南。我也對使用gerunds作爲協議名稱感興趣。 – MartinW

    +1

    @MartinW動名詞的用法來自於你如何閱讀協議:*方法來訪問*等,在藍皮書大汗說明。 –

    回答

    1

    我認爲在最後一個選項中,不是查看方法中發送的消息類別進行分類,而是查找此消息的發件人類別會更好。

    這是一種啓發式的,我經常使用。

    我發現原因是,這一方法稱爲從這個最有可能是一般性的服務,但發送者認爲這是一個服務,並確定在使用此消息感興趣的領域。

    ---- ----編輯

    另一個相關的啓發,很簡單的是:如果所有的發件人是本地(本類或子類),然後在「私」是一個很好的候選人進行分類的。沒有發件人的方法通常是私人服務。

    +0

    感謝。我已經實施了你的第二個建議,並正在考慮第一個建議。 –

    1

    當然。這裏有一些其他著名的模式:

    實例創建

    newStringBrick 
        ^GLMStringBrick new 
    

    默認值

    defaultDotsText 
        ^'...' 
    

    延遲初始化

    items 
        ^items ifNil: [ items := OrderedCollection new ] 
    

    當然,也有很多的框架/應用程序特定模式。 Sunit單元測試,海邊應用程序,magritte描述都有特定的模式。一個很簡單的一個是馬格利特-描述

    descriptionArticle 
        <magritteDescription> 
        ^QCToOneOptionRelationDescription new 
         accessor: #article; 
         label: 'Article'; 
         options: self possibleArticles; 
         priority: 40; 
         classes: QCArticle allSubclasses; 
         yourself. 
    

    [編輯],然後啓發:另一種可能是很好的建議是我用最後的一個,或者如果你看到一個短重複週期適合的人。

    是否有可能直接爲擴展方法找到一個好的類別?

    +0

    謝謝Stef。這些都是經常出現的方法分類的很好的例子(和提示)。我的問題是不過有關如何建議類別名稱的短暫而寶貴的列表,對指定選擇,類似情報,我們有選擇自動完成啓發式(這是相當複雜的。) –