簡體   English   中英

尋找推斷選擇器分類的方法

[英]Looking for ways to deduce selector classifications

我正在研究一個SelectorClassifierAssistant對象,該對象建議對方法進行可能的分類。

到目前為止,我已經實施了以下策略:

  1. 相同選擇器的本地分類(即,在相同的層次結構中上下)
  2. 其他類中相同選擇器的其他分類(按頻率排序)
  3. 訪問器檢測(是一個setter或getter的方法? ifTrue: [^#accessing]
  4. 已知的選擇器前綴(#is ...,#print ...,#as ...等)

並且,如果以上所有都失敗(即建議為空):

  1. 方法中發送的其他消息的類別(僅在方法的類和超類中理解的類別)

我可以使用其他已知的啟發式方法嗎?

- -編輯 - -

  1. 選擇器只從同一個類發送 - > #private(@Carlos E. Ferro)

  2. 已知選擇器(#=#hash等 - > #comparing等)

  3. 空類別(如果類別為空,則可能是用戶剛剛添加它以對下一個選擇器進行分類。)

當然。 以下是一些其他眾所周知的模式:

實例創建

newStringBrick
    ^ GLMStringBrick new

默認值

defaultDotsText
    ^ '...'

懶惰的初始化

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

當然,還有許多框架/應用程序特定的模式。 Sunit單元測試,海邊應用,magritte描述都有特定的模式。 一個非常簡單的是magritte-description

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

[編輯]然后啟發式:另一個可能很好的建議是我最后使用的,或者如果你看到一個短的重復周期適合的那個。

是否可以直接為擴展方法找到一個好的類別?

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

這是我經常使用的啟發式方法。

我發現的原因是,從這個調用的方法最有可能是一般服務,但是這個方法的發送者將其視為一種服務,並定義了使用此消息的“感興趣區域”。

----編輯----

另一個相關的啟發式,非常簡單:如果所有發件人都是本地的(這個類或子類),那么“私有”是一個很好的候選者來對它進行分類。 沒有發送者的方法通常是私人服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM