<div dir="ltr">just a small comment, with LiveTyping this is easily solved  😉 </div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Wed, Apr 8, 2026 at 3:43 PM Juan Vuletich via Cuis-dev <<a href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
  
  <div>
    <p>I've just pushed some additional calls to #subclassResponsibility.</p>
    <p>Thanks!</p>
    <div>On 2026-04-07 4:13 PM, Facundo Javier
      Gelatti via Cuis-dev wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>Hi Juan!</div>
        <div><br>
        </div>
        <div>Awesome! Thanks for the changes and for your review !</div>
        <div><br>
        </div>
        <div>PS: Also, you're right to point out that I missed to check
          that the message should be sent to self in my scripts; I did
          know it was necessary, but for some reason I forgot to
          actually put that in the code, my bad!</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">El mar, 7 abr 2026 a las
          15:50, Juan Vuletich (<<a href="mailto:juan@jvuletich.org" target="_blank">juan@jvuletich.org</a>>)
          escribió:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <p>Hi Facundo,</p>
            <p>This is very good!</p>
            <p>After running these, I pushed seven change sets. Some do
              add the #subclassResponsibility call. Others refactor the
              code a bit.</p>
            <p>After these updates, your scripts still find many
              candidates. For instance, in Case 2, it still finds
              Morph>>#rotation: . But this one is ok, as the call
              on #rotation: is not to self! Same happens for
              LookupKey>>#value:. LookupKeys don't even have a
              value at all! In Case 3, not every dialog will include
              #cancel and #ok, etc.</p>
            <p>There are still other candidates where adding the
              abstract method will make sense. A case by case review is
              needed.</p>
            <p>Cheers,</p>
            <div>On 2026-04-03 1:05 PM, Facundo Javier Gelatti via
              Cuis-dev wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">
                <div>Inspired by the email I sent about adding an
                  abstract method to SystemWindow, I built some scripts
                  to try to identify other abstract methods that are
                  missing.</div>
                <div><br>
                </div>
                <div>So, I attach three scripts that find classes and
                  the selectors of their potentially missing abstract
                  methods. This is the logic for each one of them:</div>
                <div><br>
                </div>
                <div>Case 1: pretty sure we should create abstract
                  methods for these
                  <div style="margin-left:40px"> Analyzes classes we
                    know are abstract (i.e. which have abstract methods,
                    have no instances and have at least one subclass),
                    selects the methods that are implemented by <i>all</i>
                    subclasses, which <i>are not</i> in the abstract
                    superclass, but that <i>are sent</i> from the
                    superclass to self.<br>
                  </div>
                  <br>
                  Case 2: also pretty sure, but in classes that don't
                  have abstract methods yet<br>
                  <div style="margin-left:40px"> Similar to Case 1, but
                    the classes that are analyzed don't have any
                    abstract method. Because the messages are sent to
                    self from the superclass, I strongly suspect that
                    these should also be implemented as abstract
                    methods.<br>
                  </div>
                  <br>
                  Case 3: not sure, but worth checking<br>
                  <div style="margin-left:40px"> Analyzes classes we
                    know are abstract (similar to Case 1, but more
                    constrained: the classes should have at least *2*
                    subclasses), selects the methods that are
                    implemented by <i>all</i> subclasses, which are not
                    in the abstract superclass, and that are <i>not</i>
                    sent from the superclass to self (to avoid repeating
                    what was found in Case 1).<br>
                    In this case we don't have the evidence of a message
                    being sent to self from the abstract class, but
                    having all subclasses (which are at least 2)
                    implement the same message from an abstract
                    superclass is some form of evidence. For example,
                    I'm pretty sure we should have an abstract method
                    for Boolean>>#orNot:.</div>
                </div>
                <div><br>
                </div>
                <div>Being able to decide what to do with these findings
                  requires domain knowledge, so I'm not saying we should
                  100% add all of these as abstract methods. Probably
                  there are better design decisions depending on
                  the particular cases.</div>
                <div><br>
                </div>
                <div>I hope you find this helpful!</div>
                <div><br>
                </div>
                <div>Cheers,</div>
                <div>Facu</div>
                <div><br>
                </div>
              </div>
              <br>
              <fieldset></fieldset>
            </blockquote>
            <pre cols="72">-- 
Juan Vuletich
<a href="http://www.cuis.st" target="_blank">www.cuis.st</a>
<a href="http://github.com/jvuletich" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a></pre>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset></fieldset>
    </blockquote>
    <pre cols="72">-- 
Juan Vuletich
<a href="http://www.cuis.st" target="_blank">www.cuis.st</a>
<a href="http://github.com/jvuletich" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a></pre>
  </div>

-- <br>
Cuis-dev mailing list<br>
<a href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
<a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote></div><div><br clear="all"></div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="font-size:small"><div dir="ltr"><div dir="ltr"><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal"><span style="font-weight:bold">Hernán Wilkinson</span><br>Agile Software Development, Teaching & Coaching</span></font></span></span></strong></span></div><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Phone: +54-011</span></font></span></span></strong></span><font face="tahoma, sans-serif" size="2">-4893-2057</font></div><div style="font-size:12.8px"><strong style="font-family:tahoma,sans-serif;font-size:xx-small"><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">Twitter: @HernanWilkinson</span></font></span></span></strong></div><div style="font-size:12.8px"><span style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span style="font-size:8pt"><span style="font-size:small"><font size="2"><span style="font-weight:normal">site: <a href="http://www.10pines.com/" style="color:rgb(17,65,112)" target="_blank">http://www.10Pines.com</a></span></font></span></span></strong></span></div><div style="font-size:12.8px"><font face="tahoma, sans-serif"><span style="border-collapse:collapse">Address: Alem 896</span></font>, Floor 6, Buenos Aires, Argentina</div></div></div></div></div></div></div></div>