Copyright © 2003 Systek OOs gjenfødsel? Innlegg til Systek’s teknologisamling Johannes Brodwall
Copyright © 2003 Systek Hva er objektsorientering? "The term object was first formally applied in the Simula language, and objects typically existed in Simula programs to simulate some aspect of reality" [Booch 91, p77]. ”In the so-called Scandinavian approach (originating in Simula), the main point is that programs expressed in an object-oriented manner will be more understandable and manageable for human beings.” [ootips.org]
Copyright © 2003 Systek Hvilke objekter er i våre programmer? Brukergrensesnitt-objekter Transaksjonshåndteringsobjekter Datatransportobjekter Dataaksessobjekter HTTP-håndteringsobjekter Meldinghåndteringsobjekter Hvor er brukerens objekter?
Copyright © 2003 Systek Teknologi 1: Naked objects Et rammeverk i Java En filosofi De sentrale objektene i programmet skal være objektene i brukens begrepsverden Brukeren skal ha mulighet til å manipulere disse objektene fritt
Copyright © 2003 Systek Et eksempel
Copyright © 2003 Systek Litt kode public class Project extends AbstractNakedObject { private TextString projectTitle = new TextString(); private InternalCollection tasks = new InternalCollection(Task.class, this); private Contact owner; public TextString getProjectTitle() { return projectTitle; } /* org.nakedobjects.object.AbstractNakedObject#title() */ public Title title() { return new Title(projectTitle.title().toString() + " (" + tasks.size() + " tasks)"); } public final InternalCollection getTasks() { return tasks; } public void addTasks(Task task) { tasks.add(task); task.associateProject(this); objectChanged(); } public void removeTasks(Task task) { tasks.remove(task); task.disassociateProject(this); objectChanged(); } public void associateOwner(Contact owner) { this.owner = owner; if ( owner != null ) owner.getProjects().remove(this); } public void disassociateOwner(Contact owner) { if ( this.owner != null ) owner.getProjects().remove(this); this.owner = null; }
Copyright © 2003 Systek Brukergrensesnitt
Copyright © 2003 Systek Bygget inn test-støtte public class ECSStories extends AcceptanceTest { public void story4CopyBooking() { story("Copy a Booking from a customers previous booking"); step("Retrieve the customer by name."); View customer = getClassView("Customers").findInstance("Pawson"); step("Retrieve the booking object by its reference number."); View booking = customer.getField("Bookings", "#2 Confirmed"); step("Create a copy of the booking which will copy the the details."); View copiedBooking = booking.rightClick("Copy Booking"); checkFieldsIn(copiedBooking); checkField("Customer", booking.getField("Customer")); //... step("Specify when."); booking.fieldEntry("Date", "Dec 17, 2001"); booking.fieldEntry("Time", "6:30:00 PM"); //... }
Copyright © 2003 Systek Automatisk generert rapport
Copyright © 2003 Systek Naked objects: Noen tanker Designing and developing business systems using naked objects offers four principal benefits: Naked objects can better accommodate future changes to business requirements. Naked objects empower the user. Naked objects improve communication between developers and users. Naked objects can speed up the development process. Kilde: Richard Pawson
Copyright © 2003 Systek Noen detaljer Automatisk objekts-relasjonsmapping (Men fungere ikke alltid like bra) Toveisrelasjoner er vanskeligere med OO enn med databaser
Copyright © 2003 Systek Teknologi 2: Prevalence Hvorfor bruker vi alltid databaser? Prevalence: Legg alle objekter i RAM! RAM is getting cheaper every day. Researchers are announcing major Breakthroughs In Memory Technology. Even today, servers with multi- gigabyte RAM are commonplace. For many systems it is already feasible to keep all business objects in RAM. [ - PrevalenceSkepticalFAQ ] Breakthroughs In Memory TechnologyPrevalenceSkepticalFAQ Prevayler hevder å være flere1000 ganger raskere enn relasjonsdatabaser Forutsetning: Alle business-objekter får plass i RAM
Copyright © 2003 Systek Implementasjon Alle endringer til objekter skjer via Command Objects (A i ACID) Alle command objects legges i logg før de utføres (D i ACID) Command objects utføres serielt (I i ACID) Periodisk lagres alle objekter til snapshot
Copyright © 2003 Systek ACID A – (Atomic) Utviklers ansvar (men støttet) C – (Consistent) Utviklers ansvar (men det er vanlig) I – (Isolated) Alle Command Objects utføres serielt D – (Durable) Command Log og snapshots sørger for dette
Copyright © 2003 Systek Implementasjoner Prevayler – Open-Source Java implementasjon Bamboo.Prevalence – Open-Source.NET implementasjon Madeleine – Open-Source Ruby implementasjon En typisk implementasjon tar < 1000 kodelinjer
Copyright © 2003 Systek Oppsummering Naked objects og Prevalence fokuserer på objektene i brukernes begrepsverden Radikalt forskjellig fra mainstream: Automatisk UI istedet for kodet UI Ikke relasjonsdatabaser Vil det fungere i de applikasjonene vi utvikler? Skalerer det? (Hvor mye må vi skalere?) Sparer det arbeid? Vil det fungere med “mine data”?
Copyright © 2003 Systek Tilslutt Spørsmål? Er noen av disse ideene gode? Er de forferdelige? Hva kan vi lære fra dem? Hva skal til for å gjøre dem bra nok? Kjenner noen til relaterte teorier?