Guido rethinking removal of cmp from sort method

harrismh777 harrismh777 at
Fri Apr 1 08:13:04 CEST 2011

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

More information about the Python-list mailing list