Introduction - DidaWiki

stuckwarmersΚινητά – Ασύρματες Τεχνολογίες

14 Δεκ 2013 (πριν από 3 χρόνια και 5 μήνες)

170 εμφανίσεις

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

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

Class Hierarchy (
NextSTEP

1988)

Cocoa (2013)

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


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


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