Programmazione Avanzata

Download Report

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