Steven D'Aprano wrote:
The difference between implementation and interface is
not specific to object-oriented code --

When I speak of implementation vs interface I am speaking from a strictly object oriented philosophy, as pedigree, from Grady Booch, whom I consider to be the father of Object Oriented Analysis and Design (Booch, OO A&D with apps, 1994). He makes this remarkable statement: "The interface of a class is the one place where we assert all of the assumptions that a client may make about any instances [objects] of the class; the implementation encapsulates details about which no client may make assumptions" (Booch, p50, 1994). The Class interface holds a "special" firmness which fosters the client relationship of trust and assumption, without which OOA&D is pointless. The interface of a Class must not change once advertised, and once in production. This is specific to OOA&D. Encapsulation of the abstractions must reside within the implementation about which no one may make assumptions. This is also where all of the "cruft" (if any) resides. Cruft never resides at the interface, only in the encapsulation of the Class abstractions, and only if the Class was poorly designed.

To put my advice in MY other words, here are my two rules about Class interface based on Booch, but in terms that are mine, and which are way simpler to put into practice:

Rule 1:
    Never change an advertised Class interface.

    Corollary 1)a The Class interface never encapsulates cruft.

    Corollary 1)b The Class implementation usually encapsulates cruft.

    Corollary 1)c Only the Class implementation may be changed.


Rule 2:
If an advertised Class interface must be changed to remove cruft, please re-read Rule #1, and review corollaries 1)a, 1)b, and 1)c.


----

As an aside, but in response to your straw man argument regarding obscure "cruft," none of the bickering regarding this cmp issue is about obscure code. We are discussing one of the primary methods of one of the primary Class objects are the lovely heart of Python--- the list.sort(). This is NOT obscure. Guido arbitrarily altered the interface to one of the MOST important Class objects in all of the Python language. This is not good, and it does violate the spirit of OOA&D.

If the interface changes had been left to type promotion on integer divide, and the print() method, then folks would probably not be in such an uproar over 3x. But Guido over reached the bounds of credulity by altering a Class method that *many* people find useful, desirable, efficacious and easy... they use it and the love it (right or wrong). The client(s) are making assumptions about the List Class interface and they have an OOA&D right to do so... and they are left with their rear-ends handing out in the breeze because their assumptions are false. Not good.

Kind regards,

m harris








--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to