Fragility in software arises when implicit assumptions that software artifacts make about dependent artifacts are broken during evolution. This can occur when a base class evolves in a way that violates assumptions made by subclasses, resulting in the fragile base class problem. It can also happen when aspects rely on pointcut expressions that fail to correctly capture join points when a base program evolves. To address fragility, the assumptions should be explicitly documented as evolution contracts and verified when software changes. Model-based pointcuts and usage contracts are approaches that define such contracts to preserve architectural integrity and design knowledge as software evolves over time.
Design patterns are known as best practices that the programmer can use to solve common problems when designing an application or system.
Singelton Design Pattern
Factory Design Pattern
Builder Design Pattern
Strategy Design Pattern
Iterator Design Pattern
Observer Design Pattern
Prototype Design Pattern
Command Design Pattern
Decorator Pattern
Proxy Pattern
Adapter Pattern
Design patterns difference between interview questionsUmar Ali
The document summarizes differences between various design patterns and programming concepts. It compares Factory Pattern vs Abstract Factory Pattern, Builder Pattern vs Abstract Factory Pattern vs Composite Pattern, MVC vs MVP, Proxy Pattern vs Observer Pattern, Strategy Pattern vs Inversion of Control, IDictionary vs Dictionary, Factory Pattern vs Dependency Injection, String.Clone() vs String.Copy(), Strategy Pattern vs Factory Pattern, Proxy vs Adapter, Decorator vs Visitor patterns.
The document discusses several creational design patterns including Singleton, Abstract Factory, Builder, and Prototype patterns. It provides definitions and examples of how each pattern works, including ensuring a class only has one instance (Singleton), creating object factories without specifying classes (Abstract Factory), constructing complex objects step-by-step (Builder), and copying existing objects (Prototype). The document is intended for teaching software design patterns to students.
The document discusses design patterns, which are reusable solutions to common software design problems. It provides examples of different types of patterns, including creational (Factory Method, Abstract Factory, Builder, Prototype, Singleton), structural (Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy), and behavioral (Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor) patterns. Each pattern is defined and an example problem and solution using the pattern is described.
The document discusses design patterns. It begins with an introduction to design patterns, covering their history and definition. It then covers several fundamental design principles for patterns, including avoiding tight coupling, favoring composition over inheritance, and the single responsibility principle. Finally, it discusses several specific design patterns, including factory method, singleton, strategy, state, and proxy patterns. It provides examples of when and how to apply these patterns.
The document discusses design patterns including the Singleton, Factory Method, and Abstract Factory creational patterns. It provides examples of how these patterns are implemented in .NET, such as the Singleton pattern used by the HttpContext class and the Factory Method pattern used by collections to return specific enumerator types. The document also covers other design patterns, principles like SOLID and GRASP, code smells, and relationship types in object-oriented design.
Design patterns are reusable solutions to common programming problems. The Gang of Four (GoF) authored the seminal book on design patterns, identifying 23 patterns divided into creational, structural and behavioral categories. Creational patterns provide object creation mechanisms, structural patterns manage object relationships, and behavioral patterns define communication between objects. Design patterns can be further divided into class and object patterns based on whether relationships are defined at compile-time or run-time.
Design patterns are known as best practices that the programmer can use to solve common problems when designing an application or system.
Singelton Design Pattern
Factory Design Pattern
Builder Design Pattern
Strategy Design Pattern
Iterator Design Pattern
Observer Design Pattern
Prototype Design Pattern
Command Design Pattern
Decorator Pattern
Proxy Pattern
Adapter Pattern
Design patterns difference between interview questionsUmar Ali
The document summarizes differences between various design patterns and programming concepts. It compares Factory Pattern vs Abstract Factory Pattern, Builder Pattern vs Abstract Factory Pattern vs Composite Pattern, MVC vs MVP, Proxy Pattern vs Observer Pattern, Strategy Pattern vs Inversion of Control, IDictionary vs Dictionary, Factory Pattern vs Dependency Injection, String.Clone() vs String.Copy(), Strategy Pattern vs Factory Pattern, Proxy vs Adapter, Decorator vs Visitor patterns.
The document discusses several creational design patterns including Singleton, Abstract Factory, Builder, and Prototype patterns. It provides definitions and examples of how each pattern works, including ensuring a class only has one instance (Singleton), creating object factories without specifying classes (Abstract Factory), constructing complex objects step-by-step (Builder), and copying existing objects (Prototype). The document is intended for teaching software design patterns to students.
The document discusses design patterns, which are reusable solutions to common software design problems. It provides examples of different types of patterns, including creational (Factory Method, Abstract Factory, Builder, Prototype, Singleton), structural (Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy), and behavioral (Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor) patterns. Each pattern is defined and an example problem and solution using the pattern is described.
The document discusses design patterns. It begins with an introduction to design patterns, covering their history and definition. It then covers several fundamental design principles for patterns, including avoiding tight coupling, favoring composition over inheritance, and the single responsibility principle. Finally, it discusses several specific design patterns, including factory method, singleton, strategy, state, and proxy patterns. It provides examples of when and how to apply these patterns.
The document discusses design patterns including the Singleton, Factory Method, and Abstract Factory creational patterns. It provides examples of how these patterns are implemented in .NET, such as the Singleton pattern used by the HttpContext class and the Factory Method pattern used by collections to return specific enumerator types. The document also covers other design patterns, principles like SOLID and GRASP, code smells, and relationship types in object-oriented design.
Design patterns are reusable solutions to common programming problems. The Gang of Four (GoF) authored the seminal book on design patterns, identifying 23 patterns divided into creational, structural and behavioral categories. Creational patterns provide object creation mechanisms, structural patterns manage object relationships, and behavioral patterns define communication between objects. Design patterns can be further divided into class and object patterns based on whether relationships are defined at compile-time or run-time.
Design patterns are optimized, reusable solutions to the programming problems that we encounter every day. A design pattern is not a class or a library that we can simply plug into our system; it's much more than that. It is a template that has to be implemented in the correct situation. It's not language-specific either. A good design pattern should be implementable in most—if not all—languages, depending on the capabilities of the language. Most importantly, any design pattern can be a double-edged sword— if implemented in the wrong place, it can be disastrous and create many problems for you. However, implemented in the right place, at the right time, it can be your savior.
The document provides an overview of the GoF design patterns including the types (creational, structural, behavioral), examples of common patterns like factory, abstract factory, singleton, adapter, facade, iterator, observer, and strategy, and UML diagrams illustrating how the patterns can be implemented. Key aspects of each pattern like intent, relationships, pros and cons are discussed at a high level. The document is intended to introduce software engineers to design patterns and how they can be applied.
This document discusses implementing object-oriented programming in Visual Basic .NET. It outlines objectives like identifying classes, objects, structures, abstract classes, interfaces and assemblies. It describes creating a class with members to store customer data, and a Windows form with controls to accept this data. The data will be stored in member variables of a Customer class instance. The form will have labels, textboxes and buttons. Entering data will instantiate the Customer class and store information in its members.
The document summarizes several design patterns including creational, structural, and behavioral patterns. Creational patterns like abstract factory, builder, and factory method deal with object instantiation. Structural patterns like adapter, bridge, composite deal with class and object composition. Behavioral patterns like chain of responsibility, command, and observer deal with object communication and can be used to implement things like menus, toolbars, and event handling. Many of these patterns are used throughout the .NET framework in various class libraries.
Dev labs alliance top 20 basic java interview question for sdetdevlabsalliance
The document provides 20 basic Java interview questions for software development engineers in test (SDET) roles. The questions cover topics such as Java access specifiers, object-oriented programming principles, the differences between classes and interfaces, exception handling, threads, collections, and more. The questions are multiple choice or short answer and include explanations of concepts in Java.
The document discusses classes and objects in Java, including defining classes with data members and methods, creating objects, using constructors, and the structure of a Java application. It also covers access specifiers, modifiers, compiling Java files, and provides a summary of key points about classes and objects in Java.
This presentation on Object-Oriented Application Frameworks is part of a larger course LINGI2252 on Software Maintenance and Evolution, given at UCL university in Belgium.
Framework design involves balancing many considerations, such as:
- Managing dependencies between components to allow for flexibility and evolution over time. Techniques like dependency injection and layering help achieve this.
- Designing APIs by first writing code samples for key scenarios and defining object models to support these samples to ensure usability.
- Treating simplicity as a feature by removing unnecessary requirements and reusing existing concepts where possible.
The document discusses software design patterns, including definitions, types (creational, behavioral, structural), components, benefits, and examples. It provides examples of patterns like facade, observer, decorator, state, strategy, template method, iterator, bridge, and singleton from both non-software (e.g. auction, vending machine) and software domains (Temple Run 2 game). For each pattern, it explains the concept, provides a non-software diagram, describes an implementation in Temple Run 2 through diagrams and text, and references additional resources for design patterns.
This document discusses structural design patterns from the Gang of Four (GoF) patterns book. It introduces proxies, decorators, adapters, façades, and composites patterns. Proxies provide a placeholder for another object to control access. Decorators dynamically add/remove responsibilities to objects. Adapters allow incompatible interfaces to work together. Façades provide a simplified interface to a subsystem. Composites represent part-whole hierarchies to access all parts uniformly. Bridge and flyweight patterns were not covered due to dependencies on other patterns. The document emphasizes introducing extra levels of indirection to solve problems and favoring composition over inheritance.
Aspect Oriented Programming Through C#.NETWaqas Tariq
.NET architecture was introduced by Microsoft as a new software development environment based on components. This architecture permits for effortless integration of classical distributed programming paradigms with Web computing. .NET describes a type structure and introduces ideas such as component, objects and interface which form the vital foundation for distributed component-based software development. Just as other component frameworks, .NET largely puts more emphasis on functional aspects of components. Non-functional interfaces including CPU usage, memory usage, fault tolerance and security issues are however not presently implemented in .NET’s constituent interfaces. These attributes are vital for developing dependable distributed applications capable of exhibiting consistent behavior and withstanding faults.
Effective Java, Third Edition - Keepin' it EffectiveC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2uOURQH.
Joshua Bloch covers some highlights from the third edition of “Effective Java”, concentrating on streams and lambdas. The recently released edition of Effective Java contains one new chapter, fourteen new items, and numerous changes to existing items. Filmed at qconnewyork.com.
Joshua Bloch is the author of Effective Java and coauthor of Java Puzzlers and Java Concurrency in Practice. He was formerly the chief Java architect at Google, a distinguished engineer at Sun Microsystems. He led the design and implementation of numerous Java platform features, including the Java 5 language enhancements and the Java Collections Framework.
The document discusses design patterns, which are common solutions to recurring problems in software design. It provides examples of some common design patterns like factory pattern, abstract factory pattern, builder pattern, and prototype pattern. It also discusses categories of design patterns like creational, structural and behavioral patterns.
This document discusses several design patterns including Singleton, Observer, Delegation, Adapter, Facade, Immutable, Read-Only Interface, Proxy, and Factory. For each pattern, the document describes the context, problem, forces, and solution. The patterns provide reusable solutions to common programming problems by separating interfaces from implementations.
Caleb Jenkins discusses best practices for writing automated unit tests, including having a test runner, setting the test context or scene, and handling dependencies through techniques like dependency injection and mocking. He advocates writing tests first to define requirements and ensure code meets expectations. Jenkins also addresses challenges with testing edges or interfaces and advocates separating UI/data logic from edges to increase testability.
The document discusses symmetry in software interfaces and its importance. It notes that JUnit's assertion methods like assertTrue have symmetric opposite methods like assertFalse, but assertEquals is missing an assertNotEquals method. This inconsistency can surprise programmers. Adding assertNotEquals would increase interface symmetry but also interface size. The document argues interface usability should take priority, and symmetric interfaces help communicate concepts more clearly.
8 most expected java interview questionsPoonam Kherde
This document lists the 8 most common Java interview questions. It discusses questions about the Java Virtual Machine (JVM), platform independence in Java, abstract classes, packages, thread states including ready, running, waiting and dead, deadlocks, the most important feature of Java being platform independence, and the base class for all classes being java.lang.Object. The document provides brief explanations and definitions for each interview question.
This document provides an overview of assemblies, strong names, and attributes in the .NET framework. It discusses the different types of assemblies and deployment, how to generate strong names for assemblies, and how assemblies are loaded and resolved. It also covers attributes in .NET - what they are, how they are used to provide metadata, and common attribute targets like methods, properties, and assemblies. Key types of attributes discussed include ObsoleteAttribute and DllImportAttribute.
This document provides an introduction to design patterns, including their motivation, history, definition, categories, and examples. Some key points:
- Design patterns solve common programming problems by describing reusable solutions that can be adapted for different situations.
- Common categories include creational, structural, and behavioral patterns. Example patterns discussed are Singleton, Decorator, Abstract Factory.
- Design patterns speed up development, promote code reuse, and make software more robust, maintainable and extensible. Resources for further information on design patterns are provided.
Design patterns are optimized, reusable solutions to the programming problems that we encounter every day. A design pattern is not a class or a library that we can simply plug into our system; it's much more than that. It is a template that has to be implemented in the correct situation. It's not language-specific either. A good design pattern should be implementable in most—if not all—languages, depending on the capabilities of the language. Most importantly, any design pattern can be a double-edged sword— if implemented in the wrong place, it can be disastrous and create many problems for you. However, implemented in the right place, at the right time, it can be your savior.
The document provides an overview of the GoF design patterns including the types (creational, structural, behavioral), examples of common patterns like factory, abstract factory, singleton, adapter, facade, iterator, observer, and strategy, and UML diagrams illustrating how the patterns can be implemented. Key aspects of each pattern like intent, relationships, pros and cons are discussed at a high level. The document is intended to introduce software engineers to design patterns and how they can be applied.
This document discusses implementing object-oriented programming in Visual Basic .NET. It outlines objectives like identifying classes, objects, structures, abstract classes, interfaces and assemblies. It describes creating a class with members to store customer data, and a Windows form with controls to accept this data. The data will be stored in member variables of a Customer class instance. The form will have labels, textboxes and buttons. Entering data will instantiate the Customer class and store information in its members.
The document summarizes several design patterns including creational, structural, and behavioral patterns. Creational patterns like abstract factory, builder, and factory method deal with object instantiation. Structural patterns like adapter, bridge, composite deal with class and object composition. Behavioral patterns like chain of responsibility, command, and observer deal with object communication and can be used to implement things like menus, toolbars, and event handling. Many of these patterns are used throughout the .NET framework in various class libraries.
Dev labs alliance top 20 basic java interview question for sdetdevlabsalliance
The document provides 20 basic Java interview questions for software development engineers in test (SDET) roles. The questions cover topics such as Java access specifiers, object-oriented programming principles, the differences between classes and interfaces, exception handling, threads, collections, and more. The questions are multiple choice or short answer and include explanations of concepts in Java.
The document discusses classes and objects in Java, including defining classes with data members and methods, creating objects, using constructors, and the structure of a Java application. It also covers access specifiers, modifiers, compiling Java files, and provides a summary of key points about classes and objects in Java.
This presentation on Object-Oriented Application Frameworks is part of a larger course LINGI2252 on Software Maintenance and Evolution, given at UCL university in Belgium.
Framework design involves balancing many considerations, such as:
- Managing dependencies between components to allow for flexibility and evolution over time. Techniques like dependency injection and layering help achieve this.
- Designing APIs by first writing code samples for key scenarios and defining object models to support these samples to ensure usability.
- Treating simplicity as a feature by removing unnecessary requirements and reusing existing concepts where possible.
The document discusses software design patterns, including definitions, types (creational, behavioral, structural), components, benefits, and examples. It provides examples of patterns like facade, observer, decorator, state, strategy, template method, iterator, bridge, and singleton from both non-software (e.g. auction, vending machine) and software domains (Temple Run 2 game). For each pattern, it explains the concept, provides a non-software diagram, describes an implementation in Temple Run 2 through diagrams and text, and references additional resources for design patterns.
This document discusses structural design patterns from the Gang of Four (GoF) patterns book. It introduces proxies, decorators, adapters, façades, and composites patterns. Proxies provide a placeholder for another object to control access. Decorators dynamically add/remove responsibilities to objects. Adapters allow incompatible interfaces to work together. Façades provide a simplified interface to a subsystem. Composites represent part-whole hierarchies to access all parts uniformly. Bridge and flyweight patterns were not covered due to dependencies on other patterns. The document emphasizes introducing extra levels of indirection to solve problems and favoring composition over inheritance.
Aspect Oriented Programming Through C#.NETWaqas Tariq
.NET architecture was introduced by Microsoft as a new software development environment based on components. This architecture permits for effortless integration of classical distributed programming paradigms with Web computing. .NET describes a type structure and introduces ideas such as component, objects and interface which form the vital foundation for distributed component-based software development. Just as other component frameworks, .NET largely puts more emphasis on functional aspects of components. Non-functional interfaces including CPU usage, memory usage, fault tolerance and security issues are however not presently implemented in .NET’s constituent interfaces. These attributes are vital for developing dependable distributed applications capable of exhibiting consistent behavior and withstanding faults.
Effective Java, Third Edition - Keepin' it EffectiveC4Media
Video and slides synchronized, mp3 and slide download available at URL https://bit.ly/2uOURQH.
Joshua Bloch covers some highlights from the third edition of “Effective Java”, concentrating on streams and lambdas. The recently released edition of Effective Java contains one new chapter, fourteen new items, and numerous changes to existing items. Filmed at qconnewyork.com.
Joshua Bloch is the author of Effective Java and coauthor of Java Puzzlers and Java Concurrency in Practice. He was formerly the chief Java architect at Google, a distinguished engineer at Sun Microsystems. He led the design and implementation of numerous Java platform features, including the Java 5 language enhancements and the Java Collections Framework.
The document discusses design patterns, which are common solutions to recurring problems in software design. It provides examples of some common design patterns like factory pattern, abstract factory pattern, builder pattern, and prototype pattern. It also discusses categories of design patterns like creational, structural and behavioral patterns.
This document discusses several design patterns including Singleton, Observer, Delegation, Adapter, Facade, Immutable, Read-Only Interface, Proxy, and Factory. For each pattern, the document describes the context, problem, forces, and solution. The patterns provide reusable solutions to common programming problems by separating interfaces from implementations.
Caleb Jenkins discusses best practices for writing automated unit tests, including having a test runner, setting the test context or scene, and handling dependencies through techniques like dependency injection and mocking. He advocates writing tests first to define requirements and ensure code meets expectations. Jenkins also addresses challenges with testing edges or interfaces and advocates separating UI/data logic from edges to increase testability.
The document discusses symmetry in software interfaces and its importance. It notes that JUnit's assertion methods like assertTrue have symmetric opposite methods like assertFalse, but assertEquals is missing an assertNotEquals method. This inconsistency can surprise programmers. Adding assertNotEquals would increase interface symmetry but also interface size. The document argues interface usability should take priority, and symmetric interfaces help communicate concepts more clearly.
8 most expected java interview questionsPoonam Kherde
This document lists the 8 most common Java interview questions. It discusses questions about the Java Virtual Machine (JVM), platform independence in Java, abstract classes, packages, thread states including ready, running, waiting and dead, deadlocks, the most important feature of Java being platform independence, and the base class for all classes being java.lang.Object. The document provides brief explanations and definitions for each interview question.
This document provides an overview of assemblies, strong names, and attributes in the .NET framework. It discusses the different types of assemblies and deployment, how to generate strong names for assemblies, and how assemblies are loaded and resolved. It also covers attributes in .NET - what they are, how they are used to provide metadata, and common attribute targets like methods, properties, and assemblies. Key types of attributes discussed include ObsoleteAttribute and DllImportAttribute.
This document provides an introduction to design patterns, including their motivation, history, definition, categories, and examples. Some key points:
- Design patterns solve common programming problems by describing reusable solutions that can be adapted for different situations.
- Common categories include creational, structural, and behavioral patterns. Example patterns discussed are Singleton, Decorator, Abstract Factory.
- Design patterns speed up development, promote code reuse, and make software more robust, maintainable and extensible. Resources for further information on design patterns are provided.
Framework Design Guidelines For Brussels Users Groupbrada
This document summarizes 10 years of experience with framework design guidelines from Microsoft. It discusses core principles of framework design that have remained the same over 10 years, such as layering dependencies and managing types. It also outlines new advances like test-driven development, dependency injection, and tools for dependency management and framework design. The document concludes by emphasizing that framework design principles have stayed consistent while new techniques have emerged to help implement those principles.
Usage contracts (presented at SATToSE 2014 in L'Aquila, Italy)kim.mens
Usage Contracts (or uContracts for short) offer a simple unit-testing like way for letting programmers document and check conformance to structural source-code regularities, based on a “contract” metaphor. They provide immediate feedback to developers during coding. Essentially, they can be seen as an embedded DSL which remains close to the host programming language and with a tight but not coercive integration with the host IDE, to avoid adoption issues.
This work was conducted by Angela Lozano, Andy Kellens and Kim Mens.
The document discusses object-oriented programming concepts including encapsulation, composition, inheritance, polymorphism, abstract classes, and interfaces. It provides examples of how these concepts are implemented in C# through classes, inheritance between base and derived classes, abstract methods, and interfaces. It also summarizes key features like polymorphism which allows treating a derived class object as its base class.
The document provides an overview of enterprise computing and its key components from an object-oriented perspective. It discusses enterprise architectural concepts like the enterprise, enterprise components, and the role of information technology. It then covers various enterprise-enabling technologies like enterprise user interfacing, data enabling, distributed communications, common services, systems assurance, and web enabling. Finally, it discusses object-oriented software development for the enterprise using concepts like enterprise objects, the development process, the unified modeling language, and component-based development standards.
These projects demonstrated my ability to program Visual Studio .Net with C# as the programming language in 2 separate projects.
The Purpose of the first project was to build parts of the business tier for a retail Company. The goal is to create and test two assemblies. The first assembly is a class library project called Foundation. It will contain various interfaces and base classes.
The second assembly is also a Class Library project and its called AppTypes and it will contain various entity, collection and exception classes used by various business processes.
The Objective of the second project Is to create a database to support the principal functions of a library’s day-to-day operations: adding new members (adult and juvenile) and checking books in and out.
A Windows Forms-based front end application that will provide a librarian with a visual interface through which he or she may perform the desired functions.
And the project goal is to Design and develop a front end application that satisfies the four basic functionalities: Add Adult, Add Juvenile, Check in a book, Check Out a book.
Develop code that is easily maintainable.
Provide validation for all required fields.
Provide adequate error handling.
Produce a user interface that is intuitive, requiring minimal training for users while minimizing resource utilization.
The document discusses encapsulation in C++ and object-oriented design principles. It covers:
1) Encapsulation requires that classes have clearly defined external interfaces and hide implementation details. This reduces coupling between classes.
2) Functions and classes should minimize side effects by passing parameters as constants and returning values rather than references when possible.
3) References are generally preferable to pointers as they only provide access to an object's interface rather than its memory.
4) Constructors and destructors help classes encapsulate their own resource management by allocating resources during initialization and freeing them during destruction.
The document discusses software design patterns and how they can help address common problems that arise during design. It describes three main categories of patterns - creational, structural, and behavioral - and provides examples of specific patterns like Singleton, Factory, Adapter, and Bridge. The key benefits of design patterns are that they provide proven, reusable solutions to general problems and help create flexible, modular designs that can more easily adapt to changes.
This document discusses improving software economics through a balanced approach of reducing application size and complexity, improving development processes, using skilled personnel, creating better environments, and focusing on quality. It focuses on reducing size, particularly through using higher-level programming languages, object-oriented methods and visual modeling, reuse, and commercial components. It also discusses improving software processes by making each step more efficient, eliminating unnecessary steps, and employing concurrency where possible.
This document discusses software design patterns, which provide reusable solutions to common problems in software design. It covers creational patterns like singleton and abstract factory, structural patterns like adapter and bridge, and behavioral patterns like iterator and observer. Patterns help developers solve recurring problems in an elegant and reusable way by providing tried-and-tested solutions to common design problems. The document also discusses categories of patterns, their elements, and when to use different patterns.
This document discusses the Factory Method design pattern. The Factory Method pattern defines an interface for creating objects but allows subclasses to decide which class to instantiate. This allows subclasses to vary the type of objects that will be created. The code examples demonstrate creating different types of pages for documents by overriding the factory method in subclasses to return the specific page product.
This document discusses object-oriented programming concepts like classes, inheritance, and polymorphism.
It begins with an overview of classes, explaining that classes contain instance variables and methods. Classes can extend other classes through inheritance, allowing subclasses to override or add new functionality. References can point to objects of a class or any superclass.
The document then discusses polymorphism, where the decision of which method to call is determined at runtime based on the actual object type. This allows subclasses to be used through their parent class references. The summary cautions that direct concrete inheritance can cause issues if not used carefully, such as violating the Liskov substitution principle.
This is a presentation I did for the Cedar Rapids .NET User Group (CRineta.org). It was intended to present object oriented concepts and their application in .NET and C#.
JavaOne 2009 BOF-5189 Griffon In DepthDanno Ferrin
Griffon is a software framework based on Grails that allows building rich desktop applications with Groovy and Java. It follows conventions like Grails for configuration and file layout. Griffon applications use the model-view-controller pattern extensively with reusable "MVC groups". The framework provides built-in support for testing and plugins to automate common tasks.
Design patterns are commonly used to address problems relating to application architecture and design. The concept originated from Christopher Alexander's work noting common building design problems and solutions. Design patterns ensure problems are addressed through well-known solutions, and most problems have likely been solved before. Common patterns include observer/subject to separate user interface from business logic, singleton to control object construction, strategy to allow multiple algorithms, and template method to define an algorithm's structure. The facade pattern provides different views of subsystems to users by hiding implementation details. The command pattern encapsulates requests as objects with a known interface to decouple senders and receivers.
The document discusses software development using Java components. It covers key concepts like encapsulation, polymorphism and interfaces that make Java suitable for component-based development. Object-oriented features like these allow Java classes to act as reusable software components. The document also provides an example of how the School System is structured into packages that represent components.
Sofwear deasign and need of design patternchetankane
This document discusses software design and the need for design patterns. It covers the three phases of software design: analysis, design, and implementation. It then discusses what design patterns are, providing the definition that they are standard solutions to common programming problems. The document outlines the three main categories of design patterns: structural, creational, and behavioral. It provides examples like the factory pattern, explaining how it works to reduce dependencies and improve flexibility. In summary, the document introduces software design processes and argues that using design patterns provides benefits like improved code reuse and developer communication.
These slides, covering the topics of Software Maintenance and Evolution, are introductory slides to the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
An introductory lecture on Context-Oriented Programming, part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium. This particular lecture was made by Dr. Sebastian Gonzalez in close collaboration with Prof. Kim Mens.
Software Reuse and Object-Oriented Programmingkim.mens
These slides on Software Reuse and Object-Oriented Programming are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium
These slides on Object-Oriented Design Heuristics are part of the course LINGI2252 “Software Maintenance and Evolution”, given by Prof. Kim Mens at UCL, Belgium.
The document discusses refactoring code to improve its internal structure without changing external behavior. It defines refactoring and provides reasons for refactoring like improving design and readability. It also categorizes different types of refactorings like decomposing methods, moving features between objects, and organizing data. Specific refactorings are explained like extract method, inline method, move method, and encapsulate field.
Towards a Context-Oriented Software Implementation Frameworkkim.mens
Context-aware systems must manage the dynamic selection, activation, and execution of feature variants according to changing contexts, detected from data gathered from their surrounding execution environment. Many context-oriented programming languages focus only on the implementation level by providing appropriate language abstractions for implementing behavioural variations that can adapt dynamically to changing contexts. They often ignore or presuppose the existence of mechanisms to deal with earlier aspects such as the gathering of sensory input and context discovery. In this presentation we discuss a layered software architecture that reconciles all these aspects in a single implementation framework, which can be customised by application programmers into actual context-aware applications. This framework and a simulator to test applications build using this framework we recently implemented in Ruby and Ruby on Rails.
Towards a Taxonomy of Context-Aware Software Variabilty Approacheskim.mens
Modern software systems demand more and more smart capabilities depending on their context of use, as well as the ability to dynamically adapt these capabilities according to sensed context changes. This requires appropriate techniques for modelling, representing and handling context-aware software variability. While traditional variability modelling approaches like feature orientation and software product lines are evolving to address the increased dynamicity and context specificity required for this new generation of software systems, new paradigms such as context-oriented programming have emerged. Although developed independently, since they address similar issues, many similarities exist between these approaches. The purpose of this work is to define, categorise and compare key concepts shared by these approaches.
Such a taxonomy is a first step towards a better understanding of the differences and similarities between different approaches for managing context-aware software variability, and to achieve a cross-fertilisation between them.
An introductory lecture on context-oriented programming, part of a full course on Programming Paradigms at UCL university in Belgium, focussing on reflection and meta programming techniques in a variety of languages. This particular lecture was made by Sebastian Gonzalez in close collaboration with Kim Mens.
This document provides an overview of reflection and metaprogramming by defining key concepts and terminology. It discusses computational systems, programs, meta systems, and meta programs. Reflection is defined as a program examining or changing its own implementation at runtime. For a system to be reflective, its concepts must be reified and it must have a causal connection between the system and what it represents. Types of reflection include introspection, structural reflection, and computational reflection. Reflective systems can be implemented using towers of interpreters or reflective architectures with meta-objects.
This document discusses advanced reflection features in Java, including dynamic proxies, call stack introspection, and instrumentation. It begins with an overview of dynamic proxies using the Proxy class and InvocationHandler interface. It then covers examining the call stack using Throwable and StackTraceElement. Finally, it describes instrumentation using the java.lang.instrument package to modify bytecode at runtime, such as logging class loads or tracing method calls. Examples are provided for each topic.
An introduction to the basics of reflection in the object-oriented programming language Java, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme.
An introduction to some advanced language features of the object-oriented programming language Ruby, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme. This lecture looks into the Ruby features of higher-order programming (lambdas), singleton methods, mixin modules, reflection and metaprogramming.
A quick introduction to the object-oriented programming language Ruby, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme.
A quick introduction to the object-oriented programming language Smalltalk, part of a full lecture on Programming Paradigms at UCL university in Belgium, focussing on the programming languages Smalltalk, Ruby and Java, with reflection and meta programming as underlying theme.
A gentle and intuitive introduction to reflection and meta programming, part of a full lecture on programming paradigms at UCL university in Belgium, with reflection and meta programming as theme. (Further lectures focus more in depth on reflection and meta programming in a variety of languages such as Smalltalk, Ruby and Java.)
Managing the Evolution of Information Systems with Intensional Views and Rela...kim.mens
This document describes research into managing consistency in evolving information systems. The researchers developed an initial solution to detect inconsistencies when merging data from multiple sources for an IP phone localization case study at a university. This involved scripts to extract data from different sources and merge it daily. Numerous errors and inconsistencies were found in the individual sources and merged data. To address this, the researchers improved the solution by combining intensional views and relational algebra to define and check constraints across data tables via a user interface. This allowed expressing and detecting inconsistencies more easily. The approach was validated on the phone localization data.
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxSitimaJohn
Ocean Lotus cyber threat actors represent a sophisticated, persistent, and politically motivated group that poses a significant risk to organizations and individuals in the Southeast Asian region. Their continuous evolution and adaptability underscore the need for robust cybersecurity measures and international cooperation to identify and mitigate the threats posed by such advanced persistent threat groups.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Speck&Tech
ABSTRACT: A prima vista, un mattoncino Lego e la backdoor XZ potrebbero avere in comune il fatto di essere entrambi blocchi di costruzione, o dipendenze di progetti creativi e software. La realtà è che un mattoncino Lego e il caso della backdoor XZ hanno molto di più di tutto ciò in comune.
Partecipate alla presentazione per immergervi in una storia di interoperabilità, standard e formati aperti, per poi discutere del ruolo importante che i contributori hanno in una comunità open source sostenibile.
BIO: Sostenitrice del software libero e dei formati standard e aperti. È stata un membro attivo dei progetti Fedora e openSUSE e ha co-fondato l'Associazione LibreItalia dove è stata coinvolta in diversi eventi, migrazioni e formazione relativi a LibreOffice. In precedenza ha lavorato a migrazioni e corsi di formazione su LibreOffice per diverse amministrazioni pubbliche e privati. Da gennaio 2020 lavora in SUSE come Software Release Engineer per Uyuni e SUSE Manager e quando non segue la sua passione per i computer e per Geeko coltiva la sua curiosità per l'astronomia (da cui deriva il suo nickname deneb_alpha).
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
3. Fragility
Software artefacts make many assumptions about
other software artefacts
Many of these assumptions are not documented,
nor verified explicitly
When an artefact evolves into one that doesn't
res-pect the assumptions, fragility problems arise
Fragility problems can thus be seen as a kind of
substitutability problem
5. The Fragile Base
Class Problem
Object-oriented programs consist of many classes connected
through inheritcance
Base classes make assumptions about how they can be reused
by subclasses
Subclasses make assumptions about the classes they inherit
from
These assumptions are often not documented explicitly, nor
verified automatically
The fragile base class problem [5,7] occurs when a base class
evolves into a new one that doesn't respect these assumptions
6. The Fragile Base
Class Problem
Base class
evolution
inheritance
?
Subclass
Evolved
Base
class
7. Fragility in Aspect
Oriented Programming
AOP = base code + aspects
Aspects = pointcuts + advice code
Aspects modify the behaviour of the base
code by weaving in advice code at
various join points, described by
pointcut expressions
Base code is oblivious to the aspects
8. Fragility in AOP
Both pointcuts and advice code make
assumptions about the base code they refer to or
act upon
These assumptions are not documented explicitly,
nor verified automatically
Subtle conflicts arise when the base code evolves
in a way that breaks these assumptions
These problems are known as the fragile pointcut
problem [2,6] and the fragile advice problem [1]
9. Fragility in AOP
Base code
aspect
weaving
evolution
p
ile
ag
fr
Aspect =
pointcut
+ advice
t ?
cu
nt
oi
?
ice
dv
a
ile
ag
fr
Evolved
Base
code
10. Dealing with
fragility
Fragility problems arise when implicit assumptions
between dependent artefacts get broken when the
system evolves
Solution consists of documenting the assumptions
explicitly, and verifying them upon evolution
By defining some kind of evolution contract between
the evolving artefact and its dependent artefacts
A verifiable agreement between the two parties
Detect fragility conflicts by verifying the contract
11. Dealing with
fragility
Different kinds of fragility conflicts can be
distinguished, depending on :
how the artefact evolves
how the artefacts depend on each other
what conditions of the contract are breached
Appropriate solutions to these conflicts can be
proposed accordingly
12. Handling the fragile
base class problem
1. Define a reuse contract [7] between a derived
class and the base class it depends on
how does the reuser specialize the base
class?
2. Define a usage contract [4] between the base
class and the derived classes that "use" it
what regularities does the base class expect
the derived classes to respect ?
13. Reuse Contracts
Reuse contracts define an evolution contract between
a "reuser" and the base class it depends upon
the base class declares a specialization
interface [3] defining what reusers can rely upon
a reuse operator defines how derived classes reuse
the base class
an evolution operator defines how the base class
evolved
17. Usage Contracts
Usage contracts [4] define an evolution
contract between the base class and the
classes that "use" it
base class defines what regularities
should be respected by its derived classes
regularities are checked when modifying
existing or creating new derived classes
18. Usage Contracts
Describe expectations of "provider" :
FAMIXSourcedEntity
copyFrom: anEntity within: aVisitor
inheritance
All overriders of
copyFrom: within:
should start with a super call
"Consumer" should comply with
these expectations
X
copyFrom: anEntity within: aVisitor
super copyFrom: anEntity
within: aVisitor
19. Usage Contracts
FAMIXSourcedEntity
copyFrom: anEntity within: aVisitor
All overriders of
copyFrom: within:
should start with a super call
Evolved / new class
inheritance
should still / also comply
X
Evolved or new X
copyFrom: anEntity within: aVisitor
super copyFrom: anEntity
within: aVisitor
evolution
copyFrom: anEntity within: aVisitor
???
20. Usage Contracts
A DSL for declaring usage contracts
Specifying the liable entities of the contract
scope of classes or methods to which the contract is
applicable
Defining the structural regularity
structural constraints to be respected by the liable
entities
These lightweight contracts are checked and reported
immediately during development and maintenance
21. Usage Contracts
All overriders of
copyFrom: within:
Specifying the liable entities
should start with a super call
classesInFAMIXSourcedEntityHierarchy
<liableHierarchy: #FAMIXSourcedEntity>
Defining the structural regularity
copyFromWithinWithCorrectSuperCall
<selector: #copyFrom:within:>
contract:
require:
(condition beginsWith:
if: (condition isOverridden)
(condition doesSuperSend: #copyFrom:within:)
22. The fragile
pointcut problem
In aspect-oriented programming, the base program
is oblivious of the aspects that act upon it
Pointcut expressions describe at what join points in
the base program advice code will be woven
The fragile pointcut problem [2] occurs when
pointcut expressions unintendedly capture or
accidentally miss particular join points
as a consequence of their fragility with respect
to seemingly safe evolutions of the base program
23. The fragile
pointcut problem
E.g., a pointcut expression to capture getters and setters
An "enumeration" pointcut:
pointcut accessors()
call(void Buffer.set(Object)) || call(Object Buffer.get());
May accidentally miss other relevant getters and setters
A "pattern-based" pointcut:
pointcut accessors()
call(* set*(..)) || call(* get*(..));
May unintendedly capture methods that aren't getters or setters
for example, a method named setting
24. The fragile
pointcut problem
Pointcuts in program
Pointcuts in evolved program
d
nde ture
te
nin t cap
u in
po
oin
j
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Source program
EVOLUTION
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Evolved Source program
al
ent iss
id
acc int m
po
oin
j
25. Model-based
pointcuts
Model-based poincuts [2] define an evolution contract between the pointcuts
and the base code, in terms of an intermediate model that both agree upon.
A "model-based" pointcut:
pointcut accessors()
classifiedAs(?methSignature,AccessorMethods) &&
call(?methSignature)
The base code should comply with the model, but remains oblivious of the
actual aspects
Some fragility problems can be encountered by defining and verifying
additional constraints at the level of the model
For example, every setter method should have a name of the form setX
and assign a value to the variable X
26. Model-based
pointcuts
Pointcuts
Additional constraints such as:
Conceptual Model
{ methods named set* } =
{ methods assigning an instance variable }
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
*
*
Class
Name
Attributes
Attributes
Operations
Operations
Source code
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
27. Model-based
pointcuts
Pointcuts
Pointcuts in Evolved Code
Conceptual Model
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Conceptual Model
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
Source code
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
EVOLUTION
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
*
Class
Name
Attributes
Attributes
Operations
Operations
Class
Name
Attributes
Attributes
Operations
Operations
Evolved Source code
Class
Name
Attributes
Attributes
Operations
Operations
28. Summary
Software fragility arises when implicit
assumptions artefacts make about dependent and
depending artefacts get broken upon evolution
Solutions consists of documenting these
assumptions explicitly as "evolution contracts",
and verifying them whenever the software evolves
Appropriate conflict resolutions can be suggested
depending on how the artefacts evolved and on
what assumptions got broken
29. Other potential
application areas
We have applied these ideas mostly to OO, FW and
AO software development
Other envisaged application areas :
dynamically adaptive systems
and COP in particular
evolving configurations of network routers
data-intensive systems
...
30. Take-away message
A good idea is timeless.
To reinvent yourself it sometimes suffices to rediscover
yourself.
Revive research on software reuse and evolution by reusing
or evolving old research on software reuse and evolution.
Context-oriented progamming is one potential new
application area of these ideas.
Ideas could be applied to any domain where you have
potential fragility problems.
31. Timeline
Usage Contracts: Offering Immediate Feedback on
Violations of Structural Source-code Regularities
Angela Lozanoa , Andy Kellensb , Kim Mensa
a
Universit´ catholique de Louvain
e
b
Vrije Universiteit Brussel
Abstract
Developers often encode design knowledge through structural regularities
such as API usage protocols, coding idioms and naming conventions. As
these regularities express how the source code should be structured, they
provide vital information for developers using or extending that code. Adherence to such regularities tends to deteriorate over time when they are not
documented and checked explicitly. This paper introduces uContracts, an
internal DSL to codify and verify such regularities using ‘usage contracts’.
Whereas our DSL does not aim to be complete, it does cover common usage
regularities, while providing a means through metaprogramming to express
atypical regularities. Common regularities are identified based on regularities supported by existing approaches to detect bugs or suggest missing code
fragments, techniques that mine for structural regularities, as well as on the
analysis of an open-source project. We validate our DSL by documenting
the usage regularities of an industrial case study, and analyse how useful the
information provided by checking these regularities is for the developers of
that case study.
?
1. Introduction
Being able to document and preserve architectural integrity and design
knowledge of an application is important to increase its longevity [4]. Given
that over time the actual implementation structure tends to drift away from
Email addresses: angela.lozano@uclouvain.be (Angela Lozano),
andy.kellens@vub.ac.be (Andy Kellens), kim.mens@uclouvain.be (Kim Mens)
contracts
March 26, 2013
Dyn. evol.
Contracts
Usage
AOSD'06
Pointcuts
Model-based
OOPSLA'96
Contracts
Reuse
Preprint submitted to Science of Computer Programming
32. Some references
1. Cyment, Kicillof, Altman & Asteasuain. Improving AOP systems’ evolvability by
decoupling advices from base code. RAM-SE’06 WS @ ECOOP’06, pp 9–21, 2006.
2. Kellens, Mens, Brichau & Gybels. Managing the evolution of aspect-oriented software
with model-based pointcuts. ECOOP’06, pp 501–525, 2006.
3. Lamping. Typing the specialization interface. OOPSLA ’93, pp 201–214, 1993.
4. Lozano, Kellens & Mens. Usage contracts: Offering immediate feedback on violations
of structural source-code regularities. Under revision.
5. Mikhajlov & Sekerinski. A study of the fragile base class problem. ECOOP’98, pp
355–382, 1998.
6. Noguera, Kellens, Deridder & D’Hondt. Tackling pointcut fragility with dynamic
annotations. RAM-SE’10 WS @ ECOOP’10, pp 1–6, 2010.
7. Steyaert, Lucas, Mens & D’Hondt. Reuse contracts: Managing the evolution of reusable
assets. OOPSLA’96, pp 268–285, 1996.