PROGRAMMAZIONE AD OGGETTI E BIG DATA

Academic Year 2022/2023 - Teacher: Marco RUSSO

Expected Learning Outcomes

The student will acquire:

  • capability to develop object-oriented software programs;
  • a certain knowledge of advanced computer tools of current use in the fields of basic and applied research;
  • capability to use the analogy tool to apply known solutions to new problems (problem solving);
  • capability to design and implement experimental and theoretical procedures to solve problems of academic and industrial research or to improve existing results;
  • capability to work with increasing degrees of autonomy, also assuming responsibility in the planning and management of projects;
  • communication skills in Italian and English in the fields of object-oriented ;
  • capability to present one's own research or review activity to a generic audience.

Furthermore, with reference to the so-called Dublin Descriptors, this course helps to acquire the following soft skills:

Knowledge and understanding:

The primary objective of the course is the students' acquisition of the "philosophy" of object-oriented programming regardless of the programming language. Another goal is to understand the software bottlenecks to be implemented in order to optimize in terms of speed/memory. Another objective is to know how to disseminate the knowledge acquired and/or developed through its software in written form. Lastly, it is intended, optionally, to provide the rudiments of artificial intelligence.

Applying knowledge and understanding:

It is intended to provide students with the following skills:

  • Translate the problems to be solved or the phenomena to be simulated into object-oriented code;
  • Design, describe and implement object-oriented programs and libraries;
  • Knowing how to use the basic tools for object oriented programming;
  • Understand and analyze object-oriented code also in terms of efficiency;

Making judgments.

Through the examination of numerous code examples and a substantial practical component that involves carrying out computer exercises, the learner will be able, both autonomously and cooperatively, to analyze problems and design and implement the related software solutions. to objects and optimized in speed and / or memory.

Communication skills. 

The student will acquire the necessary communication skills and expressive appropriateness in the use of technical verbal language in the context of computer object programming. Optionally he will acquire acne communication skills in the field of artificial intelligence. Learning skills. The course aims to provide the learner with the necessary theoretical and practical methodologies to be used in research and professional contexts with particular attention to the physical field.

Course Structure

Frontal lessons and practical exercises.

Should the circumstances require online or blended teaching, appropriate modifications to what is hereby stated may be introduced, in order to achieve the main objectives of the course.

Required Prerequisites

Very thorough knowledge of the C language with particular regard to pointers.

Attendance of Lessons

Mandatory

Detailed Course Content

* Definition of Big Data
  * Aspects of Big Data addressed in this course:
    o Through the optimization of the programs in speed and / or memory
      you can get huge gains!
      = Optimization of already written code.
      = Optimization of the code already in the design phase of the same.
    o Hierarchy of memories.
     > Optimized RAM access
     > Programming to take advantage of CACHE.
     > Lookup tables
    o How to make good or bad use of SIMD processors and / or GPUs.
    o Parallel calculation: when and when not.

- Object-oriented programming: a language-independent programming style
  * From structured C to C++.
    > Review of variables, addresses, arrays and pointers in C.
    > Passing values ​​to functions and discussion of references
    > Pointers to functions
    > Dynamic memory allocation
    > The creation of libraries, headers, object files and linking.
    > What does object-oriented programming mean
    > The concept of code reusability and modifiability of the same
    > Classes, data hiding and abstract data types
    > Class-level members
    > Constructors and destructors of objects
    > Inheritance
    > Polymorphism
    > Programming examples of type objects: stack, queue and tree
    > Examples where classes with different trade-offs are implemented
      memory / speed and comparison with C ++.
  * Once you have thoroughly learned the basic concepts of ad programming
    objects it is easy to switch to any native object language.
    An example is C ++
    > Pros and Cons of a Native Object Language
    > Quick overview of the concepts previously illustrated
      all implemented in C++
    > Further aspects of C++: overloading operators, templates, etc.

Textbook Information

Notes provided in class. These notes, the code developed in class and any other material useful for the course will be available on the teacher's website: superpippo.ct.infn.it/~marco/didattica.

Course Planning

 SubjectsText References
1AllNotes and handouts provided by the teacher

Learning Assessment

Learning Assessment Procedures

Practical thesis carried out in agreement with the teacher. Once the topic has been agreed, in total temporal freedom on the part of the student, an appropriate object code in C is created. Together with the code, a written report, preferably in latex, is expected to be delivered. Both the code and the report will be considered in the final evaluation of the student.