====== Advanced Programming ====== **Teacher**: //[[http://www.di.unipi.it/~attardi|Giuseppe Attardi]],// Room: 292 DE,// Office Hours: Monday, 15:00 // **Teaching Assistant**: Andrea Madotto ** Master (Laurea Magistrale)**: [[http://compass2.di.unipi.it/didattica/wif18/|Informatics]]. ^ Schedule ^^^ ^ Day ^ Hour ^ Room ^ | Monday| 11-13 | C1, Polo Fibonacci | | Tuesday| 9-11 | C1, Polo Fibonacci | | Friday| 11-13 | N1, Polo Fibonacci | **Piazza** The [[http://piazza.com/unipi.it/spring2017/pa/home|Piazza Community]] for this course. Follow [[http://support.piazza.com/customer/en/portal/articles/1646659-enroll-in-a-class|instructions to enroll]]. ====== Tests and Exams ====== Midterm {{ :magistraleinformatica:pa:midterm17-04.pdf |Assignment (updated 8/4/17}}: deadline 15/05/2017. Final Term: {{ :magistraleinformatica:pa:termfinal17-06.pdf |Assignment}}, deadline 26/6/2017. Final Term: {{ :magistraleinformatica:pa:termfinal17-07.pdf |Assignment}}, deadline 20/7/2017. Final Term: {{ :magistraleinformatica:pa:termfinal17-08.pdf |Assignment}}, deadline 26/7/2017. Final Term: {{ :magistraleinformatica:pa:termfinal17-09.pdf |Assignment}} deadline 28/9/2017. Final Term: {{ :magistraleinformatica:pa:termfinal18-01.pdf |Assignement}}, deadline 31/1/2018. Final Term: upon request on 26/1/2018, deadline 16/2/2018. ====== Objectives ====== The evolution of software systems towards Web Computing involves a variety of complex techniques and tools, from object-oriented programming, to component-based programming, to Web Service programming. A deep understanding of these techniques and their capabilities is required in order to fully exploit their potential. The objectives of this course are: * to provide the students with a deep understanding of how high level programming concepts and metaphors map into executable systems and which are their costs and limitations * to acquaint the students with modern principles, techniques, and best practices of advanced software construction * to introduce the students to techniques of programming at higher abstraction levels, in particular generative programming, component programming and web computing * to present state-of-the-art frameworks incorporating these techniques. This course will provide a deep understanding of modern software technologies, so that the students will be able to evaluate the effects of each design choice through all levels of a software architecture, in terms of performance, reliability, adaptability and integrability into larger systems. The course is a required course for the [[http://compass2.di.unipi.it/didattica/wif18/|Laurea Magistrale in Informatica]], and contributes to prepare professionals for the role of [[http://en.wikipedia.org/wiki/Software_architect| software architect]]. ====== Syllabus ====== - Programming Language Foundations - Syntax, Parsing, Abstract Syntax Tree, Parser Generators - Names, Scope, Binding - Parameter Passing - Static and Dynamic Allocation: Stack, Heap - Types, Inheritance, Polymorphism, Virtual Functions, 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 - Examples - JVM - CLR - Verification - Language Interoperability - Generic Programming - C++ templates - Java Generics - C# Generics - Bounded Polymorphism - Class Frameworks - Object-Oriented Programming and Frameworks - Inversion of control - Dependency Injection - Generative Programming - MetaProgramming - Reflection - Template C++ - Aspect Oriented Programming - Runtime code generation: LINQ - Generators - Program optimization and transformation - Partial evaluation - Interoperability - Process level: interprocess communication - Language level: CORBA/IDL - Object level: DCOM - Component Based Programming - COM - JavaBeans - .NET Components - OSGi - Web Services - XML, XML-Schema - SOAP, RPC, Rest - WSDL - UDDI - Service Components - Service Oriented Architecture - Microservices - Flow Based Programming - Scaling - Map/Reduce - CUDA Architecture - Web Frameworks and Applications - Asp.Net - AJAX - jQuery - Symfony - HTML 5 - Scripting - Perl, Python, JavaScript, PHP, Ruby ====== Lecture Notes ====== ^ Date ^ Lecture ^ Notes ^ | 21/02/2017 | Motivation of the course | {{:magistraleinformatica:pa:intro.ppt|Introduction}} | | 22/02/2017 | Names, Bindings | {{:magistraleinformatica:pa:name-scopes-binding.ppt|}} | | 24/02/2017 | Bindings and Scopes| {{:magistraleinformatica:pa:name-scopes-binding.ppt|}} | | 27/02/2017 | Garbage Collection | {{:magistraleinformatica:pa:gcoverview.ppt|}}{{:magistraleinformatica:pa:gctechniques.ppt|}}| | 28/02/2017 | Scope Rules: static and dynamic | {{:magistraleinformatica:pa:name-scopes-binding.ppt|}} | | 03/03/2017 | Lambda, Delegates, Closures | {{:magistraleinformatica:pa:name-scopes-binding.ppt|}} | | 06/03/2017 | Dynamic Scope. Parameter Passing | {{ :magistraleinformatica:pa:parameterpassing.ppt |}} | | 07/03/2017 | Polymorphism |{{:magistraleinformatica:pa:polymorphism.ppt|}} | | 10/03/2017 | Inheritance and Polymorphism |{{:magistraleinformatica:pa:inheritancepolymorphism.ppt|}} | | 14/03/2017 | C++ Template Metaprogramming | {{:magistraleinformatica:pa:templatemetaprogramming.pptx|}}| | | Generic Programming |{{:magistraleinformatica:pa:genericprogramming.ppt|}} | | 17/03/2017 | Parametric Polymorphism |{{:magistraleinformatica:pa:genericprogramming.ppt|}} | | 20/03/2017 | Iterators and Generators |{{:magistraleinformatica:pa:generators.ppt|}} | | | Recursive Descent Parsing |{{:magistraleinformatica:pa:parsing.ppt|Parsing}}| | 21/03/2017 | Introduction to COM |{{:magistraleinformatica:pa:com_fundamentals1.ppt|}} | | 24/03/2017 | Web Services | {{:magistraleinformatica:pa:webservices.ppt|}} | | 27/03/2017 | Web Services: Visual Studio demo | | | 28/03/2017 | Dynamic Web Pages, ASP.NET, Web Forms|{{:magistraleinformatica:pa:asp.net.pdf|ASP.NET}}| | 31/03/2017 | Canceled because of strike | | | 21/04/2017 | Midterm correction | {{ :magistraleinformatica:pa:midterm17.ppt |Midterm Solution}} | | 24/03/2017 | Aspect Oriented Programming |{{:magistraleinformatica:pa:aspectj-tutorial.ppt|AspectJ Tutorial}} | | 28/03/2017 | JavaScript | {{:magistraleinformatica:pa:javascript_language.pptx|Javascipt Language}} | | 02/05/2017 | AJAX, Json |{{:magistraleinformatica:pa:ajaxoverview.ppt|AJAX Overview}}, {{:magistraleinformatica:pa:json.ppt|JSON}} | | 05/05/2017 | jQuery | {{:magistraleinformatica:pa:jquery.ppt|jQuery}} | | 08/05/2017 | Node.js | {{{{:magistraleinformatica:pa:nodejsexplained.pdf| node.js explained}} | | 09/05/2017 | Node.js Tutorial | {{:magistraleinformatica:pa:nodejs_practice.pptx| Building a ToDo list}} {{https://github.com/attardi/pa_todoapp| Code}} | | 12/05/2017 | React | {{:magistraleinformatica:pa:react.js.pptx| React Tutorial}} | | 15/05/2017 | Asynchronous IO, Socket.io and React | {{ :magistraleinformatica:pa:reactchatroom.pptx |Chat Room Implementation}} | | | Symfony | {{{{:magistraleinformatica:pa:symfony_tutorial.pptx| Introduction to Symfony}} | | | Symfony | {{{{:magistraleinformatica:pa:symfony_tutorial.pptx| Introduction to Symfony}} | | | Map Reduce | {{{{:magistraleinformatica:pa:mapreduce.pdf| Map Reduce & Pig & Spark}} | | | Software Testing | {{:magistraleinformatica:pa:software_testing.pptx| Software Testing}} | | | JavaScript Object Model | {{:magistraleinformatica:pa:javascriptom.pptx|JavaSCript OM}} | | | Common Language Runtime | {{:magistraleinformatica:pa:cli_clr.pdf| CLI+CLR.pdf}},{{:magistraleinformatica:pa:inside_clr.pptx|}} | | | Introduction to C# | {{:magistraleinformatica:pa:introtoc_.pptx| IntroToC#}} | | | LINQ |{{:magistraleinformatica:pa:linq.ppt|LINQ}} | | | Standard Template Library| {{:magistraleinformatica:pa:stl.ppt|STL.ppt}}| | | Perpectives | {{:magistraleinformatica:pa:web2.0.ppt|Web 2.0}}| ====== Text books ====== * {{programminglanguagepragmatics.jpg|60}}[[http://www.amazon.com/gp/product/0123745144|Programming Language Pragmatics]], third ed., [[http://www.cs.rochester.edu/~scott/pragmatics/|Michael L. Scott]], Morgan-Kaufmann, 2009. [[http://books.google.com/books?id=GBISkhhrHh8C&printsec=frontcover&source=gbs_navlinks_s#v=onepage&q=&f=true|Google Books preview]]. * {{compsoft.jpg?60}}[[http://www.amazon.it/Component-Software-Beyond-Object-Oriented-Programming/dp/0201745720/ref=dp_ob_title_bk|Software Components: Beyond Object-Oriented Programming]], Clemens Szyperski, Dominik Gruntz, Stephan Murer, Addison-Wesley, 2002. ====== Similar Courses ===== * [[http://www.cs.princeton.edu/courses/archive/spring15/cos333/|Advanced Programming Techniques]], Brian Kernigham ([[http://www.princeton.edu/main/news/archive/S46/46/28K49/|President's Award for Outstanding Teaching]]), Princeton University. ====== Additional Readings ====== * {{generativeprogramming.jpg|60}}[[http://www.amazon.com/exec/obidos/ASIN/0201309777/qid=1033377411/sr=11-1/ref=sr_11_1/002-7265938-7517622|Generative Programming: Methods, Tools, and Applications]], [[http://www.amazon.com/exec/obidos/search-handle-url/index=books&field-author=Czarnecki%2C%20Krzysztof/002-7265938-7517622|Krzysztof Czarnecki]], [[http://www.amazon.com/exec/obidos/search-handle-url/index=books&field-author=Eisenecker%2C%20Ulrich/002-7265938-7517622|Ulrich Eisenecker]], Addison-Wesley, 2000. * {{objectthinking.jpg?60|}}[[http://www.amazon.com/exec/obidos/tg/detail/-/0735619654/qid=1125995331/sr=8-1/ref=pd_bbs_1/104-4669990-1687129?v=glance&s=books&n=507846|Object Thinking]], David West, Microsoft Press, 2004. * {{bibeault_cover150.jpg?60|}}[[http://www.manning.com/bibeault/|jQuery in Action]], B. Bibeault, Y. Katz, Manning, 2010. ====== Previous Editions ====== * Year [[http://medialab.di.unipi.it/web/AP/index02.html|2002]] * Year [[http://medialab.di.unipi.it/web/AP/index03.html|2003]] * Year [[http://medialab.di.unipi.it/web/AP/index04.html|2004]] * Year [[http://medialab.di.unipi.it/web/AP/index05.html|2005]] * Year [[http://medialab.di.unipi.it/web/AP/index06.html|2006]] * Year [[http://medialab.di.unipi.it/web/AP/index08.html|2008]] * Year [[http://www.cli.di.unipi.it/doku/doku.php/magistraleinformatica/pa/start?rev=1261568340|2009]] * Year [[http://didawiki.cli.di.unipi.it/doku.php/magistraleinformatica/pa/start?rev=1313804270|2010]] * Year [[http://didawiki.cli.di.unipi.it/doku.php/magistraleinformatica/pa/start?rev=1345987000|2011]] * Year [[http://didawiki.cli.di.unipi.it/doku.php/magistraleinformatica/pa/start?rev=1378219723|2012]] * Year [[http://didawiki.cli.di.unipi.it/doku.php/magistraleinformatica/pa/start?rev=1408726633|2013]] * Year [[http://didawiki.di.unipi.it/doku.php/magistraleinformatica/pa/start?rev=1454234315|2014]] * Year [[http://didawiki.di.unipi.it/doku.php/magistraleinformatica/pa/start?rev=1487577245|2016]]