Transcript Programmazione Avanzata
Advanced Programming
Giuseppe Attardi
Dipartimento di Informatica Università di Pisa
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
Instructors
Giuseppe Attardi Office: 292 Mail: [email protected]
Haoyuan Li Office: 373 Mail: [email protected]
Introduction
Programming in the 21 century
Software as complex as ever
Command line interface not enough
Data must be structured in a DB
Single computer not enough
Software development is a group activity
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
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
–
Spring
Web
– – –
ASP.Net
GWT Rails
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
Course Objectives
Understand programming language technology:
– –
Execution Models Run-time
Analyze programming metaphors:
–
Objects
– –
Components Pattern
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
Syllabus
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
AJAX: XHR, 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.
Assessment
Mid Term Paper: early November, one week homework
Term Paper: at the end of the course, one month homework
Run-time Environments
Run-Time Environments
Java Virtual Machine
.NET Common Language Runtime
Provide a virtual execution environment
–
Exposes a structure organized into elements
–
Not a simple abstraction of physical resources
Controlling execution
Avoid damages
Install/uninstall is a nightmare
Component software?
Benefits
Programmers
– – –
Use of library and tools Shorter integration time Higher productivity
Tool Developers
–
Avoid the need to care about infrastructure and interoperability
Administrators and Users
– –
Benefit from packages solutions Independence from processors or OS
Common Language Infrastructure
Exposes all items in a unified type system
Packages elements in self-describing units
Loads and resolves interdependencies at runtime
Exposes information that allows verifying the type-safety
Execution Engine enforces politics
Metadata available at runtime enables dynamic and extensible solutions
Question
Is it feasible to build a runtime common to all programming languages?
More in detail
Prolog
– –
How to implement logic variable?
Can one use the Warren-Abstract Machine?
PHP 3
–
Why assignment has unusual behavior?
LISP
–
How to handle multiple-values?
Prolog example
append(X, Y, Z) : append(NIL, Y, Y) : append([A . X], Y, [A . Z] ) :- append(X, Y, Z).
:- append([a . b . c], [d . e], R) R = [a . b . c . d . e]
Prolog backtrack
:- append(X, Y, [a . b]) :- append(X, NIL, [a . b]) X = NIL Y = [a . b] X = [a] Y = [b] X = [a . b] Y = NIL
PHP Assignement
$str = ‘Ciao.’; $str2 = $str; $str{strlen($str) – 1} = ‘!’; echo $str2;
$var = $othervar
–
Performs copy of the value of $othervar
$var = &$othervar
–
Assignment by reference
Control
Can we implement tail-recursion in C?
How to handle synchronization?
Function pointers?
How to invoke an arbitrary function given a list of arguments?
General Function Invoker
invoke(fun, argn, arglist) { if (n==0) return f(); else if (n==1) return f(arg[0]); else return fun(arg[0], arg[1], .. , arg[n-1]); }
Basic Data Types
Strings in C, Pascal and C++ are different
Array in row or column order?
Language Interoperability
C# and Cobol bark at each other
C# dog
using System; public class Dog { public virtual void RollOver () { Console.WriteLine("Scratch my tummy."); Bark(); } public virtual void Bark () { Console.WriteLine("WOOF WOOF (C#)"); } }
Cobol BigDog
000010 CLASS-ID. BigDog INHERITS Dog.
000020 ENVIRONMENT DIVISION.
000040 CONFIGURATION SECTION.
000050 REPOSITORY.
000060 CLASS Dog.
000070 OBJECT.
000080 PROCEDURE DIVISION.
000090 METHOD-ID. Bark OVERRIDE.
000160 PROCEDURE DIVISION.
DISPLAY "WOOF WOOF (COBOL)".
000210 END METHOD Bark.
000220 END OBJECT.
000230 END CLASS BigDog.
Barfing dogs
public class Demo { public static void Main() { Dog d = new Dog(); BigDog b = new BigDog(); d.RollOver(); b.RollOver(); } }
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
Home Work
Develop a simple implementation of primitives:
–
void* malloc(size_t size)
–
void free(void*)
Discuss the limits of the solution