380 likes | 495 Views
Università di Pisa. Advanced Programming. Giuseppe Attardi Dipartimento di Informatica Università di Pisa. Language is an instrument of human reason, not merely a medium for the expression of thought. G. Boole, An Investigation of the Laws of Thought, 1854. Instructor. Giuseppe Attardi
E N D
Università di Pisa Advanced Programming Giuseppe Attardi DipartimentodiInformatica Universitàdi Pisa
Language is an instrument of human reason,not merely a medium for the expression of thought.G. Boole, An Investigation of the Laws of Thought, 1854
Instructor Giuseppe Attardi Office: 292 Mail: attardi@di.unipi.it
Introduction • Programming in the 21 century • Software as complex as ever • Command line interface not enough • Data comes from multiple sources: structured (DB) and unstructured • Single computer not enough • Software development is a group activity • Deployment on Web or mobile devices
Requirements • Cannot start from scratch • Reusable components are needed • OS + libraries not enough
Elements of a Solution • Software Framework • Component Model • Execution Environment
More Complex Software • Object-Oriented Programming allows ever larger applications to be built • Require increased high-level application and system oversight • Multi-tier applications development increases the choices on how to build applications • A new Software Architect Role is needed
Software Architect Duties • Creating, defining or choosing an application framework • Creating the component design • Structure a complex application into pieces • Understand the interactions and dependencies among components • Select the platform based on cost/performance criteria • Organize and supervise the “construction site”
Application Framework • A software framework used to implement the standard structure of an application for a specific development environment
Software Framework • A collection of common code providing generic functionality that can be selectively overridden or specialized by user code providing specific functionality • Frameworks, like software libraries, provide reusable abstractions of code wrapped in a well-defined API
Framework Features • Inversion of control • unlike in libraries, the overall program's flow of control is not dictated by the caller, but by the framework • Hollywood Principle: Don’t call us, we’ll call you • Default behavior • Extensibility: usually by selective overriding • Non-modifiable framework code
OO Software Framework • Object-oriented programming frameworks consists in a set of abstract classes • An application can be built simply inheriting from pre-existing classes in the framework • Instantiation of a framework consists of composing and subclassing the existing classes
Examples of Frameworks • GUI • MFC • Gnome • Qt • General • Android • Spring • Cocoa • Web • ASP.Net • GWT • Rails • Concurrence • Hadoop Map/Reduce
Benefits of Frameworks • Drives solution • Dictates how to fill-in-the-blanks • Helps solving recurring problems • Designed for reuse • High value, since reduces cost of development
Framework Design • Intellectual Challenging Task • Requires a deep understanding of the problem domain • Requires mastering of software patterns, OO methods and polymorphism in particular
Design Pattern • More abstract than frameworks • Frameworks can be embodied in code, but only examples of patterns can be embodied in code • Design patterns explain the intent, trade-offs, and consequences of a design • Smaller architectural elements than frameworks • A typical framework contains several design patterns but the reverse is never true. • Less specialized than frameworks • Frameworks always have a particular application domain • Design patterns can be used in nearly any kind of application
Examples • Visitor • Publish/Subscribe • Factory • Dependency Injection • Chain of Responsibility • Observer • Iterator • Decorator
Dependency Injection • Allows avoiding hard-coded dependencies and changing them • Allows selection among multiple implementations of a given dependency interface at run time • Examples: • load plugins dynamically • replace mock objects in test environments vs. real objects in production environments
Course Objectives • Understand programming language technology: • Execution Models • Run-time • Analyze programming metaphors: • Objects • Components • Patterns • Learn advanced programming techniques • Understand their limits ad how to overcome them
Course Objectives • Explain how high level programming concepts and metaphors map into executable systems and which are their costs and limitations • Acquaint with modern principles, techniques, and best practices of advanced software construction • Introduce techniques of programming at higher abstraction levels, in particular generative programming, component programming and web computing • Present state-of-the-art frameworks incorporating these techniques
Programming Language Foundations • Syntax, Parsing, Abstract Syntax Tree, Parser Generators • Names, Scope, Binding • Parameter Passing • Static and Dynamic Allocaltion: Stack, Heap • Types, Inheritance, Polymorphism, Overloading • Delegates, Closures • Exception Handling
Run-time Systems • Virtual Execution Environment • Memory Management • Thread Management • Exception Handling • Security • Debugging Support • AOT and JIT Compilation • Dynamic Link/Load • Reflection • Verification • Language Interoperability
Advanced Techniques • Generic Programming • C++ templates • C# Generics • Java Generics • Generative Programming • Metaprogramming • Reflection • Template • Aspect Oriented Programming • Generators
Interoperability • Process level: interprocess communication • Language level: CORBA/IDL • Object level: DCOM
Component Based Programming • COM • JavaBeans • .NET (Assembly, Reflection, Interfaces, Attributes) • OSGi
Web Programming • Web Services, SOA • Web Frameworks • Web 2.0
Web Services • XML, XML-Schema • SOAP, RPC, Rest • WSDL • UDDI
Web Frameworks and Applications • Asp.Net • ADO.Net • J2EE • Java Server Faces • JQuery • AJAX: XHR, jQuery, YUI, GWT • Mashup and Service Oriented Architecture
Scripting Languages • Perl • Python • JavaScript • PHP
Text Books Programming Language Pragmatics, third ed., Michael L. Scott, Morgan-Kaufmann, 2009. Generative Programming: Methods, Tools, and Applications, Krzysztof Czarnecki, Ulrich Eisenecker, Addison-Wesley, 2000. Object Thinking , David West, Microsoft Press, 2004.
Text Books jQuery in Action, B. Bibeault, Y. Katz, Manning, 2010.
Assessment • Mid Term Paper: early November, one week homework • Term Paper: at the end of the course, 20 days homework
Final Term Paper • Aims at exercising ability to conceive and implement full solutions to a nontrivial problem • Examples: • ASP Code generator with regular expression matcher • Implement a DSL for handling persistent object containers • SOAP protocol and SOAP server • Code generator for searching an object DB • Xpath and XSLT Intrepreter • Language for generating network protocols • AJAX Framework • Unit Testing Framework • State Charts
Home Work • Develop a simple implementation of primitives: • void* malloc(size_t size) • void free(void*) • Assume to have available a block of memory of size MemSize starting at MemStart • Discuss the limits of the solution