CCO - 210 - Programming Languages Paradigms
Amount of credits: 8
Total hours of theoretical classes: 60
Total hours of exercise classes, seminars or directed studies): 60
Objective
At the end of the discipline, the student must be able to:
- Know the main paradigms of programming languages and some typical languages of each paradigm.
 - Know characteristics of each paradigm, especially those that allow us to differentiate one from the other.
 - Know the basic constructions of the main studied languages.
 - Write programs in each one of the studied languages using the resources presented in the discipline.
 - Recognize the different paradigms according to the criteria of imperative, declarative, compiled, interpreted.
 
Catalog Description
- Overview of Programming Languages Paradigms)
 - Overview - Why study programming paradigms)
 - Criteria adopted to the study of paradigms)
 - General descriptions of programming languages paradigms)
 - Evolution of the main programming languages)
 - Logic Programming)
 - Basic notions of logic programming and introductions Prolog language: facts, queries, unification rules, recursion)
 - Arithmetic in Prolog
 - List structures and operations with lists
 - Backtracking control (cut)
 - Modifications in the Database
 - Metaprogramming
 - Functional Programming
 - Basic notions of functional programming and introduction to LISP: data objects, functions, procedures, list processing
 - Functions that operate on lists. functions to build lists
 - Control flow, logic connectives, macros, free and bound variables
 - Higher order functions, recursion versus iteration lexical and dynamic scope
 - Imperativa
 - Revision of the basic notions of imperative and procedural languages
 - Binding and time binding of attributes to variables
 - Type checking
 - Control structures at unity level
 - Parameters passing methods
 - Subprograms implementation
 - Object Oriented Programming
 - Basic notions of object oriented programming
 - Introduction to JAVA
 - Inheritance and polymorphism in JAVA
 - Abstract classes and interfaces in JAVA
 - Data collections in JAVA
 - Concurrent Programming
 - Introduction to concurrent programming
 - Concurrent unities in JAVA - Threads and Runnable classes
 - Main methods of Thread class
 - Synchronized methods
 
Main Bibliography
- Sebesta, R.W. Concepts of Programming Languages.11a.edição/Addison-Weley, 2015.
 - Varejão, F. Linguagens de Programação – Conceitos e Técnicas. Editora Campus, 2004.
 - Bratko, I. - Prolog Programming for Artificial Intelligence. Addison Wesley, 1986.
 - Winston, P. ; Horn, B. LISP. Addison-Wesley, 1984.
 - Santos, R. ; Introdução à Programação Orientada a Objetos usando JAVA. Editora Campus, 2003.
 - Sebesta, R. W. Conceitos de Linguagens de Programação. Tradução de José Carlos Barbosa dos Santos, 5ª ed. Bookman, Porto Alegre, 2003.
 - Sethi, R. Programming Languages - Concepts and Constructs, 2nd. edition, Addison-Wesley, 1996.
 - Nicoletti, M. C. A Cartilha Prolog. Série apontamentos, Editora da UFSCar, 2003.
 - Sieera, K., Bates, B. Head Fisrt JAVA: A Brain-Friendly Guide. 2nd edition. O´Reilly Media, 2005.
 - Horstmann, C. , Cornell, G. ; Core JAVA 2 – Volume I - Fundamentos. Tradução de João Eduardo Nóbrega Tortello, Makron Books, 2001.
 - Block, J. Effective JAVA, 3rd. edition, Pearson Education Inc., 2018.