Frankly I found strange that we care about this because we can still instantiate an abstract class and I do not really see how annotating that a class is abstract help us. If I can instantiate an object and send messages and the class is abstract but there is no usage of abstract messages who cares? May be I do not have such scenarios.
Stef > On 31 Mar 2019, at 22:30, Norbert Hartl <norb...@hartl.name> wrote: > > > > Am 30.03.2019 um 21:05 schrieb Denis Kudriashov <dionisi...@gmail.com > <mailto:dionisi...@gmail.com>>: > >> We can also look into it from the other side. All these methods are >> definitely a kind of code duplication. >> I think what we need here is an explicit property for classes. It could be >> even part of class definition. > > I use it myself but it always feels a bit strange. On the one hand a class is > abstract if it includes something like subclassResponsibility and on the > other hand we try to make it some kind of type. If it would be the latter one > you could make that a Trait. Feels even more strange but .... > > Norbert >> BTW do we plan new class definition in Pharo 8? >> >> сб, 30 мар. 2019 г. в 18:35, Denis Kudriashov <dionisi...@gmail.com >> <mailto:dionisi...@gmail.com>>: >> Hello. >> >> We did recently several cleanups by marking abstract classes as abstract >> using #isAbstract method (https://github.com/pharo-project/pharo/pull/3087 >> <https://github.com/pharo-project/pharo/pull/3087>, >> https://github.com/pharo-ide/Calypso/pull/462 >> <https://github.com/pharo-ide/Calypso/pull/462>) . >> >> I would like to discuss here and decide what the right way to implement this >> method. >> >> The logic behind is to only return true when receiver is defining class of >> this method. And it should be false for any subclasses (if they do not >> implement own #isAbstract method). >> >> There is old pattern for implementation to compare name of class: >> >> MyAbstractClass class>>isAbstract >> ^self name == #MyAbstractClass >> >> It is used in many places (mostly tests). And it was used in recent Pharo PR >> (3087). >> >> We have another pattern in other places which simply compare self with class: >> >> MyAbstractClass class>>isAbstract >> ^self == MyAbstractClass >> >> And in Calypso I used "more simplified" version using equality: >> >> MyAbstractClass class>>isAbstract >> ^self = MyAbstractClass >> >> I think we would all agree that simplest version is last one. It does not >> raise any question about why we compare name or why we use identity >> comparison. So this is my choice in this discussion. >> >> Please write arguments about your preferred implementation. And let's choose >> single way at the end. There is an idea to add a command into browser to >> make classes abstract. And this decision will be used as a template. >> >> Best regards, >> Denis >>