bobs breakable objects
play

BoBs: Breakable Objects Building blocks for flexible application - PowerPoint PPT Presentation

BoBs: Breakable Objects Building blocks for flexible application architectures Ph.D. Viva-Voce July 23 rd 2007 Vikram Jamwal Advisor: Prof. Sridhar Iyer IIT Bombay, Mumbai Contents Problem and Motivations Breakable Object (BoB)


  1. BoBs: Breakable Objects Building blocks for flexible application architectures Ph.D. Viva-Voce July 23 rd 2007 Vikram Jamwal Advisor: Prof. Sridhar Iyer IIT Bombay, Mumbai

  2. Contents  Problem and Motivations  Breakable Object (BoB) basics  BoB for application partitioning  BoB as elements of reuse  Related work comparisons  Discussion and conclusions

  3. Contents  Problem and Motivations  BoB basics  BoBs for application partitioning  BoBs as elements of reuse  Related work comparisons  Discussion and conclusions

  4. Given  Computing devices with various capabilities  Netw orks which are diverse  Applications need to adapt  to different deployment scenarios

  5. Furthermore…  Applications need to evolve  Change in user requirements  Different sets of user requirements  Restructuring for • better maintenance • better performance

  6. Application adaptation Adapt A A / Adapt Refactor A σ Redesign

  7. Broader Problem  Design and implement an application  Such that  Given the software for one scenario, we can generate a version of application for a new scenario  Through refactoring ( and / or ) adaptation  Easily  Automatically ? Scenario specific Transformations ? Scenario B Scenario A

  8. Problems: Environmental Heterogeneity 1. Distribution of Components 2. Functionality Partitioning 3. (1) and (2) active areas of research, many  solutions exist (3) still requires adequate attention 

  9. Motivating Example  E-mail Application  Different devices  PC, Web-Client, Mobile Device  Different Modes / Scenarios  On-line  Disconnected  Off-line

  10. Functionality Partitioning  Apportioning application functionality into deployment specific component sub-sets  Difficult to achieve in practice because we cannot draw clean lines of separation  Some functionality may span across multiple classes  A single class may contain multiple functionality

  11. E-mail Internals(jwma)

  12. E-mail-design Login  Different E-mail Client GUI Preferences Folder-2 AddressBook partitioning for Folder-Impl different versions javax.mail  Store class on << abstract >> IMAP Folder Folder Service server Message-Impl #folder  Folder class << abstract >> Sore #store << abstract >> partitioned between Message MimeMessage user and server <<interface>> Multipart BodyPart Part

  13. More specific problem:  Design and implement an OO application such that  functionality of constituent objects is factorable  The part-units  are of desired granularity  can be easily extracted  are reusable  How?

  14. Jwma Classes <<interface>> JwmaStoreInfo <<interface>> JwmaFolder JwmaStoreImpl #m_Store <<interface>> <<interface>> <<interface>> JwmaInboxInfo JwmaTrashInfo JwmaMessagePart -m_ActualFolder -m_MessageParts[] -m_Folders #m_ActualMessage <<interface>> JwmaFolderList JwmaFolderImpl JwmaMessage JwmaMessagePartImpl #m_Subfolder <<interface>> JwmaMessageInfo m_messageInfoList JwmaDisplayMessage m_Folders List(from util) JwmaMessageInfoListImpl ComposeMessage -m_RepliedMessage m_MessageInfos JwmaMessageInfoImpl MessageSorting(from util) MessageInfoListImpl is used to keep handy information about mssages in a folder for sorting etc.

  15. Jwma Folder <<interface>> JwmaFolder <<interface>> JwmaInboxInfo <<interface>> JwmaStoreInfo <<interface>> JwmaTrashInfo JwmaFolderImpl JwmaStoreImpl -log: Logger = Logger.getLogger(JwmaFolderImpl.class) #m_Name: String #m_Store #m_Path: String javax.mail.Folder #m_Type: int #m_OnlineCounting: boolean #m_DraftProfile: FetchProfile #m_Folder <<create>>-JwmaFolderImpl(f: Folder) -m_TrashFolder <<create>>-JwmaFolderImpl(f: Folder, store: JwmaStoreImpl) +getName(): String -setName(name: String) -m_InboxFolder +getPath(): String -setPath(path: String) +getType(): int -m_JwmaRootFolder -setType(type: int) +isType(type: int): boolean -m_ActualFolder +isSubscribed(): boolean +setSubscribed(b: boolean) +getFolder(): Folder +isOnlineCounting(): boolean +setOnlineCounting(b: boolean) +addIfSubfolder(folder: JwmaFolderImpl) +removeIfSubfolder(path: String) +removeIfSubfolder(folders: String) +isSubfolder(folder: String, possiblesubfolder: String): boolean +listSubfolders(type: int): JwmaFolder -m_Folders +listSubfolders(): JwmaFolder +listSubfolders(type: int, subscribed: boolean): JwmaFolder +hasSubfolders(): boolean #m_ActualMessage JwmaFolderList +hasMessages(): boolean +getNewMessageCount(): int #m_SubFolders JwmaMessage +hasNewMessages(): boolean +getUnreadMessageCount(): int +hasUnreadMessages(): boolean +getMessageCount(): int +isEmpty(): boolean +getActualMessage(): JwmaMessage -getMessage(num: int): Message #m_MessageInfoList +getReadMessages(): int +getNextMessageNumber(): int +getPreviousMessageNumber(): int +checkMessageExistence(number: int): boolean JwmaMessageInfoListImpl +getJwmaMessage(num: int): JwmaMessage +getDraftMessage(num: int): JwmaMessage +listMessageInfos(): JwmaMessageInfo +getMessageInfoList(): JwmaMessageInfoListImpl +deleteActualMessage(): int +deleteMessage(number: int) +deleteAllMessages() +deleteMessages(numbers: int) +moveActualMessage(destfolder: String): int +moveMessage(number: int, destfolder: String) +moveMessages(numbers: int, destfolder: String) +writeMessagePart(part: Part, out: OutputStream) +equals(o: Object): boolean +prepare() +update(store: JwmaStoreImpl) +createJwmaFolderImpl(store: JwmaStoreImpl, f: Folder): JwmaFolderImpl +createJwmaFolderImpl(store: JwmaStoreImpl, fullname: String): JwmaFolderImpl +createLight(folder: Folder): JwmaFolderImpl

  16. Our solution:  Reformulate basic component of the application so that it can be readily partitioned into sub- components  Hence Breakable Objects (BoBs)  Main Advantage :  Designing and implementing applications using BoBs makes them more flexible; specifically, more amenable to partitioning . ฀

  17. Other issues: Account Account +Id +Id +Debit() +Credit() +Debit() +getBalance() +Credit() +getBalance() Shared Single +usersNameList +userName Savings Checking Savings Checking SingleSaving SharedSaving ATM ATM SharedATM SingleATM LifeLine Senior/StudentChecking MoneyMarket LifeLine Senior/StudentChecking MoneyMarket

  18. Problems with inheritance and composibility  Decomposition  Duplicated Features  Inappropriate hierarchies  Duplicated wrappers  Composition  Conflicting Features  Fragile Hierarchies

  19. Other issues:  Inheritance based composition mechanisms  Problem of software contraction  Large software sizes  Heavier and more complex versions

  20. Javax Record Store <<interface>> RecordStoreException RecordEnumeration <<interface>> +numRecords(): int RecordListener +nextRecord(): byte +nextRecordId(): int +recordAdded(recordStore: RecordStore, recordId: int) +previousRecord(): byte +recordChanged(recordStore: RecordStore, recordId: int) +previousRecordId(): int RecordStoreNotFoundException +recordDeleted(recordStore: RecordStore, recordId: int) InvalidRecordIDException +hasNextElement(): boolean +hasPreviousElement(): boolean +reset() +rebuild() +keepUpdated(keepUpdated: boolean) +isKeptUpdated(): boolean RecordStoreNotOpenException RecordStoreFullException +destroy() RecordStore +AUTHMODE_PRIVATE: int +AUTHMODE_ANY: int +deleteRecordStore(recordStoreName: String) RecordEnumerationImpl +openRecordStore(recordStoreName: String, createIfNecessary: boolean): RecordStore +openRecordStore(recordStoreName: String, createIfNecessary: boolean, authmode: int, writable: bool ean): RecordStore +numRecords(): int +openRecordStore(recordStoreName: String, vendorName: String, suiteName: String): RecordStore +nextRecord(): byte +setMode(authmode: int, writable: boolean) +nextRecordId(): int +closeRecordStore() +previousRecord(): byte +listRecordStores(): String +previousRecordId(): int +getName(): String +hasNextElement(): boolean +getVersion(): int +hasPreviousElement(): boolean +getNumRecords(): int +reset() +getSize(): int +rebuild() +getSizeAvailable(): int +keepUpdated(keepUpdated: boolean) +getLastModified(): long +isKeptUpdated(): boolean +addRecordListener(listener: RecordListener) +recordAdded(recordStore: RecordStore, recordId: int) +removeRecordListener(listener: RecordListener) +recordChanged(recordStore: RecordStore, recordId: int) +getNextRecordID(): int +recordDeleted(recordStore: RecordStore, recordId: int) +addRecord(data: byte, offset: int, numBytes: int): int +destroy() +deleteRecord(recordId: int) +getRecordSize(recordId: int): int +getRecord(recordId: int, buffer: byte, offset: int): int +getRecord(recordId: int): byte +setRecord(recordId: int, newData: byte, offset: int, numBytes: int) <<interface>> <<interface>> RecordFilter RecordComparator +enumerateRecords(filter: RecordFilter, comparator: RecordComparator, keepUpdated: boolean): Record Enumeration +matches(candidate: byte): boolean +compare(rec1: byte, rec2: byte): int

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend