Labvoop Design Patterns (Version 1.3) Table of Contents
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Component Design Recall: Problem with Subclassing
the gamedesigninitiative at cornell university Lecture 8 Component Design Recall: Problem with Subclassing Games have lots of classes Each game entity is different NPC Needs its own functionality (e.g. object methods) Human Orc Want to avoid redundancies Makes code hard to change Common source of bugs Human Human Orc Orc Warrior Archer Warrior Archer Might be tempted to subclass Common behavior in parents Redundant Behavior Specific behavior in children the gamedesigninitiative 2 Architecture Patterns at cornell university Recall: Problem with Subclassing Games have lots of classes Each game entity is different NPC Needs its own functionality (e.g. object methods) Warrior Archer Want to avoid redundancies Makes code hard to change Common source of bugs Human Orc Human Orc Warrior Warrior Archer Archer Might be tempted to subclass Common behavior in parents Redundant Behavior Specific behavior in children the gamedesigninitiative 3 Architecture Patterns at cornell university Alternative: Decorator Pattern New Functionality OriginalReference to Original Request Decorator Object Functionalitybase object Object the gamedesigninitiative 4 Architecture Patterns at cornell university Alternate: Delegation Pattern Original Reference to Request Delegate Object delegate Object Forward Request Inversion of the Decorator Pattern the gamedesigninitiative 5 Architecture Patterns at cornell university Issues with Static Typing Method in original class Original object class obj.request(arg1,…, argn) Original Reference to Request Delegate -
Game Architecture Revisited Recall: the Game Loop
the gamedesigninitiative at cornell university Lecture 8 Game Architecture Revisited Recall: The Game Loop Receive player input Process player actions Update 60 times/s Process NPC actions Interactions (e.g. physics) = 16.7 ms Cull non-visible objects Transform visible objects Draw Draw to backing buffer Display backing buffer the gamedesigninitiative 2 Architecture Revisited at cornell university The Game Loop Receive player input Process player actions Update Process NPC actions Interactions (e.g. physics) Almost everything is in loop Draw Except asynchronous actions Is enough for simple games How do we organize this loop? Do not want spaghetti code Distribute over programmers the gamedesigninitiative 3 Architecture Revisited at cornell university Model-View-Controller Pattern Controller Calls the • Updates model in methods of response to events • Updates view with model changes Model View • Defines/manages • Displays model the program data to the user/player • Responds to the • Provides interface controller requests for the controller the gamedesigninitiative 4 Architecture Revisited at cornell university The Game Loop and MVC Model: The game state Value of game resources Location of game objects Update View: The draw phase Rendering commands only Major computation in update Draw Controller: The update phase Alters the game state Vast majority of your code the gamedesigninitiative 5 Architecture Revisited at cornell university Application Structure Root Controller Ownership Subcontroller Subcontroller View Model Model -
Design Specification for Delegation and Incentives in Cardano
Engineering Design Specification for Delegation and Incentives in Cardano–Shelley AN IOHK TECHNICAL REPORT Philipp Kant Lars Brunjes¨ Duncan Coutts [email protected] [email protected] [email protected] [email protected] April 11, 2019 Abstract This document describes the requirements and design for a delegation and incentives mechanism to be used in the Shelley release of Cardano. List of Contributors Lars Brunjes,¨ Jared Corduan, Duncan Coutts, Philipp Kant, Dimitris Karakostas, Aggelos Kiayias, Elias Koutsoupias, Mario Larangeira, Damian Nadales, Aikaterini-Panagiota Stouka. Contents 1 Purpose 4 2 Requirements 5 2.1 Functional Requirements . .5 2.1.1 Proof of Eligibility . .5 2.1.2 Visibility of Delegation on the Blockchain . .5 2.1.3 Restricting Chain Delegation . .5 2.1.4 Cheap Re-Delegation . .5 2.1.5 Neutral Addresses . .5 2.2 Security Requirements . .6 2.2.1 Sybil Attack Protection at Stake Pool Level . .6 2.2.2 Address Non-malleability . .6 2.2.3 Public Spending Keys Should not be Disclosed Prematurely . .6 2.2.4 Mitigate Key Exposure . .6 2.2.5 Handle Inactive Stake Pools . .6 2.2.6 Avoid Hard Transition . .6 2.2.7 Change Delegation Without Spending Key . .7 2.3 Non-functional Requirements . .7 2.3.1 Asymptotic space and time complexity . .7 2.3.2 Minimise economic attacks . .7 2.4 Requirements to Preserve Existing Features . .7 2.4.1 Master Recovery Key . .7 1 2.4.2 Address Recognition . .7 2.4.3 Wallet should be Runnable on Independent Devices . .7 2.4.4 Maintain Privacy . -
Dissertation a Meta-Modeling Approach to Specifying
DISSERTATION A META-MODELING APPROACH TO SPECIFYING PATTERNS Submitted by Dae-Kyoo Kim Department of Computer Science In partial fulfillment of the requirements for the Degree of Doctor of Philosophy Colorado State University Fort Collins, Colorado Summer 2004 COLORADO STATE UNIVERSITY June 21, 2004 WE HEREBY RECOMMEND THAT THE DISSERTATION PREPARED UNDER OUR SUPERVISION BY DAE-KYOO KIM ENTITLED A META- MODELING APPROACH TO SPECIFYING PATTERNS BE ACCEPTED AS FULFILLING IN PART REQUIREMENTS FOR THE DEGREE OF DOCTOR OF PHILOSOPHY. Committee on Graduate Work Committee Member: Dr. James M. Bieman Committee Member: Dr. Sudipto Ghosh Committee Member: Dr. Daniel E. Turk Adviser: Dr. Robert B. France Department Head: Dr. L. Darrell Whitley ii ABSTRACT OF DISSERTATION A META-MODELING APPROACH TO SPECIFYING PATTERNS A major goal in software development is to produce quality products in less time and with less cost. Systematic reuse of software artifacts that encapsulate high-quality development experience can help one achieve the goal. Design patterns are a common form of reusable design experience that can help developers reduce development time. Prevalent design patterns are, however, described informally (e.g., [35]). This prevents systematic use of patterns. The research documented in this dissertation is aimed at developing a practical pattern specification technique that supports the systematic use of patterns during design modeling. A pattern specification language called the Role-Based Metamod- eling Language (RBML) was developed as part of this research. The RBML specifies a pattern as a specialization of the UML metamodel. The RBML uses the Unified Modeling Language (UML) as a syntactic base to enable the use of UML modeling tools for creating and evolving pattern specifications. -
Title: Foundation Patterns Authors: Dwight Deugo E-Mail: Deugo@Scs
Title: Foundation Patterns Authors: Dwight Deugo E-mail: [email protected] Address: School of Computer Science Carleton University 1125 Colonel By Drive Ottawa, Ontario, Canada, K1S 5B6 Telephone: (613) 520-2600 ext. 8438 (613) 520-4333 Fax: (613) 520-4334 Abstract: Many patterns depended on one important distinction: the distinction between an object's class and its type. For example, many patterns rely on interface inheritance, although, on examining their structures, most are described using implementation inheritance. The making of this implicit distinction gives evidence that there are patterns, fundamental to many, that live within other patterns and are at the foundation of good object-oriented principles. I give these patterns the name foundation patterns. I discuss two such foundation patterns: delegation and substitution, separating the two into their rightful positions, making clear what each patterns' role is in object-oriented design. Foundation Patterns Dwight Deugo [email protected] School of Computer Science Carleton University Introduction Although not mentioned, many patterns depend on one important distinction. This is the distinction between an object's class and its type. Stated another way, these patterns rely on interface inheritance rather than on implementation inheritance. Nevertheless, on examining their structures, most pattern descriptions use implementation inheritance. This is not surprising, since languages like Smalltalk and C++ do not explicitly support the notion of a type or a subtype within the language. Java is the exception to this, directly supporting interfaces and their inheritance, bringing attention to these well deserving topics. The making of this implicit distinction gives evidence that there are other patterns, fundamental to many, if not all patterns, which are either assumed and undocumented or still waiting to be discovered. -
Diploma Thesis in Informatics
Munich University of Technology Department of Informatics Diploma Thesis in Informatics Development of a programming-language-like temporal logic specification language Jonathan Streit Date: April 12th, 2006 Supervisor: Instructors: Prof. Dr. Dr. h.c. Manfred Broy Andreas Bauer Dr. Martin Leucker Acknowledgements I would like to express my gratitude to my project instructors, Andreas Bauer and Martin Leucker, for fruitful discussions, fast and detailed answers to my questions, their honesty and time. Furthermore I would like to thank Elmar J¨urgens and Friedemann Gerster- Streit for reading and commenting on this thesis, as well as Gerhard Dirlich for both comments on this thesis and advice on statistics. Abstract This thesis presents the high-level temporal specification language Salt (Struc- tured Assertion Language for Temporal Logic), designed for the comfortable creation of concise specifications to be used in model checking and runtime ver- ification. Unlike other specification languages, Salt does not target a specific domain. Besides the common temporal operators, Salt provides exception operators, counting quantifiers and support for simplified regular expressions, as well as scope operators, allowing to express that a property has to hold before, after or in between some events. Frequently occurring patterns can be defined as parameterisable macros and can be used in a similar way as operators of the language. A timed extension allows to express real-time constraints. In contrast to many proprietary specification languages, Salt can be trans- lated into Ltl—or in the case of real-time properties into Tltl—and thus be used as a front end to existing verification tools. A compiler performing this task has been implemented and is presented in this thesis. -
ESWP3 - Embedded Software Principles, Patterns and Procedures Release 1.0
ESWP3 - Embedded Software Principles, Patterns and Procedures Release 1.0 ESWP3 contributors September 24, 2015 Contents 1 Human Relation Patterns 3 1.1 Categorization of human relation patterns................................3 2 Principles 5 2.1 Categorization of principles.......................................5 2.2 All principles in alphabetic order....................................5 3 Build Patterns 7 3.1 Categorization of build patterns.....................................7 3.2 All build patterns in alphabetic order..................................8 4 Release Antipatterns 11 5 Requirement Patterns 13 5.1 Standardized Textual Specification Pattern............................... 13 5.2 Perform Manual Review Pattern..................................... 13 6 Design Patterns 15 6.1 Categorization of “design” patterns................................... 15 6.2 Pattern Selection Procedure....................................... 21 6.3 Legend to the design pattern sections.................................. 21 6.4 All design patterns in alphabetic order.................................. 21 7 Idioms in C 29 7.1 Classification of idioms......................................... 29 7.2 Add the name space........................................... 29 7.3 Constants to the left........................................... 29 7.4 Magic numbers as variables....................................... 30 7.5 Namend parameters........................................... 30 7.6 Sizeof to variables............................................ 30 8 Unit Test Patterns -
Enabling White-Box Reuse in a Pure Composition Language
Enabling White-Box Reuse in a Pure Composition Language Diplomarbeit der Philosophisch-naturwissenschaftlichen Fakultat¨ der Universitat¨ Bern vorgelegt von Andreas Schlapbach Dezember 2002 Leiter der Arbeit: Prof. Dr. O. Nierstrasz Nathanael Scharli¨ Institut fur¨ Informatik und angewandte Mathematik i Abstract Inheritance is a key concept of object-oriented programming languages, features such as conceptual modeling and reusability are largely accredited to it. While many useful com- ponents have been, and will be, developed in this paradigm, the form of white-box reuse offered by inheritance has a fundamental flaw: reusing components by inheritance requires an understanding of the internals of the components. We can not treat components of object-oriented languages as black-box entities, inheritance breaks encapsulation and in- troduces subtle dependencies between base and extending classes. Component-oriented programming addresses this problem by shifting away from program- ming towards software composition. We build applications by scripting components. In- stead of overriding the internals of a component, we focus on composing its interfaces only. This form of black-box reuse leads to a flexible and extendible architecture with reusable components. In this master's thesis we propose a migration strategy from class inheritance { a white- box form of reuse { to component composition as a black-box form of reuse. We present a language extension that gives us the power of inheritance combined with the ease of scripting. It enables us to reuse Java components using inheritance in JPiccola { a small, pure and general composition language implemented on the Java platform { at a high level of abstraction. Using the services provided by the language extension we can seamlessly generate interfaces and subclasses from JPiccola. -
Specification and Verification of Encapsulation in Java Programs
Specification and Verification of Encapsulation in Java Programs Andreas Roth Institut f¨urLogik, Komplexit¨at und Deduktionssysteme Universit¨atKarlsruhe, Germany E-mail: [email protected] Abstract. Encapsulation is a major concept in object-oriented designs as design pattern catalogues, approaches for alias control, and the need for modular correctness of components demonstrate. The way encapsu- lation can be formally specified in existing approaches has several short- comings. We show how encapsulation in sequential Java programs is specified by means of a new concept, called encapsulation predicates, in a clearly defined and comprehensible way, well fitting into the concept of design by contract. Encapsulation predicates extend existing functional specification languages. There are two kinds: basic predicates, which pro- vide the actual extension, and convenience predicates, which are abbre- viations for often used specification patterns. With encapsulation pred- icates, encapsulation properties in design patterns can be modelled and approaches to control aliasing can be simulated. Specifications contain- ing encapsulation predicates are deductively checkable, but can also be tackled by static analysis methods which are similar to alias control ap- proaches. 1 Introduction Encapsulation plays a major role in object-oriented software development for at least one important reason: Without it, the complexity of inter-object relations would become uncontrollable, and one of the most basic concepts of computer science, the division of tasks into subtasks, indispensable to master complex problems, would be impossible. It is thus quite striking that formal methods for software development have discovered only relative lately this problem for real-world object-oriented lan- guages, and have so far provided solutions that are only partially satisfactory (Sect. -
Workflow Patterns in Bindflow
Workflow Patterns implemented in BindFlow™ Jason Kleban BindFlow LLC Portions of the software described in this document are covered by U.S. Patent No. 8,051,427. Abstract We present an operating environment, called BindFlow™, and a companion program structure well suited for workflow programs which automate portions of real-world business processes. The flowchart logic of most business processes can be authored concisely using traditional programming techniques; however, the extended delays, overlapped execution, and hardware constraints in practical workflow scenarios severely complicate programs. We examine workflow programs as a mix of nondeterministic operations and deterministic transformations. Isolating a process’s deterministic transformations from its nondeterministic operations allows us to record every input into the process. Instances can be safely unloaded from memory, destroying state, because the record of the inputs is all that is required to rebuild the logical state of a process instance on demand. We introduce the BindFlow model and explore its ability to express the workflow patterns that have been recognized in the research by van der Aalst, Russell, ter Hofstede, et al., documented at http://www.workflowpatterns.com. 2 Pattern Implementation Quick Reference Control-Flow 20 Cancellation and Force Completion 53 Cancel Task 53 Basic 20 Cancel Case 54 Sequence 20 Cancel Region 55 Parallel Split 21 Cancel Multiple Instance Activity 56 Synchronization 22 Complete Multiple Instance Activity 57 Exclusive Choice 23 Iteration -
Contents Credits & Contacts
overload issue 68 august 2005 contents credits & contacts C++ Interface Classes - Noise Reduction Mark Radford 6 Overload Editor: Alan Griffiths [email protected] A Technique for Register Access in C++ [email protected] Pete Goodliffe 9 Contributing Editor: Mark Radford Investigating Java Class Loading [email protected] Roger Orr 14 Advisors: Software Project Management: Phil Bass Stakeholder Metrics to Agile [email protected] Projects Thaddaeus Frogley Tom Gilb 18 [email protected] Richard Blundell C-side Re-sort [email protected] Kevlin Henney 22 Pippa Hennessy [email protected] Advertising: Thaddaeus Frogley [email protected] Overload is a publication of the ACCU. For details of the ACCU and other ACCU publications and activities, see the ACCU website. ACCU Website: http://www.accu.org/ Information and Membership: Join on the website or contact David Hodge [email protected] Publications Officer: John Merrells [email protected] ACCU Chair: Ewan Milne [email protected] 3 overload issue 68 august 2005 Editorial: Size Does Matter he way that one goes about developing and delivering a software project depends critically on the scale of the project. There is no “one size fits all” Tapproach. As a trivial example to illustrate this, no one would consider writing a test harness for a “hello world” program. (Actually, I have tried this question out on some TDD proponents over the last year - and I have only found one that insists that they would do so.) Why shouldn’t one write a test harness for “hello world”? As in is an important decision and may need revision as a project all design questions it is a matter of trade-offs: there is a cost to progresses. -
Migrating Large Object-Oriented Applications Into Component-Based Ones Instantiation and Inheritance Transformation
GPCE’15 Migrating Large Object-oriented Applications into Component-based ones Instantiation and Inheritance Transformation Zakarea Alshara Abdelhak-Djamel Seriai Chouki Tibermacine Hinde Lilia Bouziane Christophe Dony Anas Shatnawi LIRMM, CNRS and University of Montpellier, France falshara, seriai, tibermacin, bouziane, dony, [email protected] Abstract architecture views, and it is easy to reuse their coarse-grained en- Large object-oriented applications have complex and numerous de- tities [5, 9]. Thus migrating these OO applications to CB ones pendencies, and usually do not have explicit software architectures. contributes to improve their maintainability, in addition to their Therefore they are hard to maintain, and parts of them are difficult reusability by feeding existing component repositories [12]. to reuse. Component-based development paradigm emerged for im- The migration process is composed of two main steps [1]: the proving these aspects and for supporting effective maintainability first step is CB architecture recovery where components and their and reuse. It provides better understandability through a high-level dependencies are identified. The second step is code transformation architecture view of the application. Thereby migrating object- where OO code is transformed into equivalent CB one. oriented applications to component-based ones will contribute to The step of CB architecture recovery was largely treated in the improve these characteristics (maintainability and reuse). In this literature [2–4, 7, 9]. Most of these works aim to identify compo- paper, we propose an approach to automatically transform object- nents as clusters of classes. They use clustering algorithms, among oriented applications to component-based ones. More particularly, other techniques, aiming at maximizing intra-component cohesion the input of the approach is the result provided by software ar- and minimize inter-component coupling to identify the architec- chitecture recovery: a component-based architecture description.