Well, there are traits – which if you are not familiar, is just a role than can be applied to an instance instead of a class.
And then you still have your abstract classes. I don’t use them that often myself, but sometimes it is appropriate to use instead of a role. Here as an example of how I use all three, extrapolated from a real project. Let’s say you have a GUI app with multiple “browsers”. An employee browser, a schedule browser, and a project browser – I would create the following classes and roles. App::Browser – Abstract browser class – all browsers descend from this class, set up initialization necessary for all browsers Our browser classes App::EmployeeBrowser App::ScheduleBrowser App::ProjectBrowsser And then some roles to be used with our browsers – each browser class can pick and choose which ones to use. These roles don’t necessarily need to applied to a browser even. Maybe they work with App::Window too. That’s what I think about when deciding between an abstract class and role. App::Role::HasToolbar App::Role::HasStatusBar App::Role::HasListView App::Role::HasIconView App::Role::HasCrudButtons And maybe we could add some traits that can be applied: App::Trait::ExitOnDelete – This trait could be applied to any App::Browser or App::Window to tell the application to exit if the window is closed App::Trait::UpdateOnShow – This trait could tell the browser refresh itself when it is displayed on the screen Hopefully this gave you some helpful insight. This is just my approach and I’m sure others have different qualifications for what should be a Role and what should be an Abstract class. - Jeffrey P.S. For anyone who is reading this and is curious about my referencing GUI programming with Moose objects, I recommend checking out my module Gapp (http://search.cpan.org/~jhallock/Gapp/) which is Moose layer over Gtk2. It allows for adding roles and traits to GUI objects among other things and overall makes Gtk+ programming in perl feel more perlish. I have had plans to announce it’s existence to this list soon, but I figured it was appropriate to plug here because of the examples I provided. From: thiagogla...@petrobras.com.br [mailto:thiagogla...@petrobras.com.br] Sent: Thursday, January 10, 2013 1:32 PM To: moose@perl.org Subject: RE: UML for a Role Thanks Jeff. Besides a Role does Moose have other thing near an abstract class? (I know roles are not abstract classes) I'm writing a doc about rational methodology and Moose, that is why I'm asking. [Inactive hide details for Jeff Hallock ---10/01/2013 16:00:25---I represent it using an interface. -----Original Message-----]Jeff Hallock ---10/01/2013 16:00:25---I represent it using an interface. -----Original Message----- De: Jeff Hallock <jhall...@wbanda.com<mailto:jhall...@wbanda.com>> Para: "thiagogla...@petrobras.com.br<mailto:thiagogla...@petrobras.com.br>" <thiagogla...@petrobras.com.br<mailto:thiagogla...@petrobras.com.br>>, "moose@perl.org<mailto:moose@perl.org>" <moose@perl.org<mailto:moose@perl.org>> Data: 10/01/2013 16:00 Assunto: RE: UML for a Role ________________________________ I represent it using an interface. -----Original Message----- From: thiagogla...@petrobras.com.br<mailto:thiagogla...@petrobras.com.br> [mailto:thiagogla...@petrobras.com.br] Sent: Thursday, January 10, 2013 12:50 PM To: moose@perl.org<mailto:moose@perl.org> Subject: UML for a Role Hi there. I'm new at moose@perl.org<mailto:moose@perl.org> and just like to know how you use to represent a Moose::Role in a UML diagram? Just like an ordinary class and <<type>>? ________________________________________ Thiago Glauco Sanchez Tec. Telecom. Pl. - Petrobras SA ITIL, MCSO, ECS ( Routing, Wireless, Switching ) tel: 55 11 3523-9756 rota: http://ltp.petrobras.com.br "Blaming the network is easy. The network touches everything. Businesses assume that the network will work perfectly and make decisions accordingly. A user can’t open that 900MB Excel spreadsheet on the file server on another continent from his 20th-century PC? Network problem. A website in Farawayistan is slow? Network problem. A user can’t get a faster response over a 33.6Kbps modem? Network problem." "O emitente desta mensagem é responsável por seu conteúdo e endereçamento. Cabe ao destinatário cuidar quanto ao tratamento adequado. Sem a devida autorização, a divulgação, a reprodução, a distribuição ou qualquer outra ação em desconformidade com as normas internas do Sistema Petrobras são proibidas e passíveis de sanção disciplinar, cível e criminal." "The sender of this message is responsible for its content and addressing. The receiver shall take proper care of it. Without due authorization, the publication, reproduction, distribution or the performance of any other action not conforming to Petrobras System internal policies and procedures is forbidden and liable to disciplinary, civil or criminal sanctions." "El emisor de este mensaje es responsable por su contenido y direccionamiento. Cabe al destinatario darle el tratamiento adecuado. Sin la debida autorización, su divulgación, reproducción, distribución o cualquier otra acción no conforme a las normas internas del Sistema Petrobras están prohibidas y serán pasibles de sanción disciplinaria, civil y penal." "O emitente desta mensagem é responsável por seu conteúdo e endereçamento. Cabe ao destinatário cuidar quanto ao tratamento adequado. Sem a devida autorização, a divulgação, a reprodução, a distribuição ou qualquer outra ação em desconformidade com as normas internas do Sistema Petrobras são proibidas e passíveis de sanção disciplinar, cível e criminal." "The sender of this message is responsible for its content and addressing. The receiver shall take proper care of it. Without due authorization, the publication, reproduction, distribution or the performance of any other action not conforming to Petrobras System internal policies and procedures is forbidden and liable to disciplinary, civil or criminal sanctions." "El emisor de este mensaje es responsable por su contenido y direccionamiento. Cabe al destinatario darle el tratamiento adecuado. Sin la debida autorización, su divulgación, reproducción, distribución o cualquier otra acción no conforme a las normas internas del Sistema Petrobras están prohibidas y serán pasibles de sanción disciplinaria, civil y penal."
<<inline: image001.gif>>