An GUI-Puck

C++ and Programming
Graphical User Interfaces
Winter Term 2018/19


Organization

Lecturer-in-Charge: Ralf Salomon

Integrated Class: Tuesday: 11:15-17:00 1219/1216, Building 1, Warnemünde

Description

Content

This module provides an introduction into object-oriented programming, the programming language C++, and the design and implementation of graphical user interfaces. These topics are covered in an integrated form in which the implementation of the graphical user interfaces serves as programming exercises to a large extent. In its current form, this module is a reformed combination of two previous modules, known as Einf¨hrung in die objektorientierte Programmierung and Programming Graphical User Interfaces.

The part on object-oriented programming includes the following concepts: classes, objects, method calls (messages), as well as public and private scope. These concepts are explained on an abstract level, and then applied in subsequent C++-exercises.

The part on graphical user interfaces (GUIs) includes their design, usability. The implementations will be done with Qt since it is platform independent (Windows, Linux, Unix, MacOS, etc.), entirely object oriented, coded in C++, and supports the programmer very well by providing very good (online) documentation as well as development tools. Furthermore, Qt provides quite sophisticated, high-level concepts such that just a few lines of C++ are sufficient to realize a first graphical user interface. In addition, Qt is freely available.

In the course of learning Qt and to get familiar with its concepts the students have to implement very small programs. Afterwards, the students are supposed to work on a decent robotics control task. Finally, the programs are presented to the class, and their usability are tested by a "dumb" test user. The last part is accompanied with an introduction on important object-oriented design concpets.

Format

According to the module description, this class consists of two hours of lecturing as well as one hour of exercises each week. These six hours are organized in one row. Due to the nature of an integrated class, we switch between lectures and exercises on demand. The actual project work, which is devoted to the robot control task, is scheduled for January.

Prerequisites

Decent programming experiences in C. Without it chances for failing are high. If in doubt, please ask any of the staff members.

Goals

The two major goals of this class are: (1) the students are proficient in the design and realization of C++ programs, and (2) they are able to build graphical user interfaces that have a decent complexity. This is a good preparation for their further theses works.

Exams

The exam will be oral (about 15 minutes) and will be by individual appointment. Please note that the successful accomplishment of the final programming project is required!


Staff

Name Email Phone
Lecturer-in-Charge Ralf Salomon 72 51
Assistent Theo Gabloffsky 72 55

Scripts


Exercises and Samples


Literature


Class Schedule

Please note that because of the integrated nature of this class, the term Integrated Class includes both teacher-centered teaching and student-centered exercises on an on-demand basis. So, please do not expect a precise distinction between both.

Tuesday (Integrated Class) Tuesday (Exercise/Laboratory)
Oktober 16. 10. 2018: Lecture User Interfaces and Usability
  • A brief history: command line, menues, graphical user interfaces
  • Usability: what is it, how to measure it, design goals, design elements, walk through
16. 10. 2018: Exercise Working on Exercises 1 and 2
23. 10. 2018: Lecture From C to C++: A First Introduction
  • Why C++?
  • Comparison of C and C++?
  • Object-oriented techniques in C: pseudo-virtual functions, function pointers, and attributes as structs
  • Styles and paradigms in C++
  • Technical terms and concepts: class, sub class, super class, attribute, operators, inheritance, messages, polymorphism
23. 10. 2018: Exercise Working on Exercises 2a and 2b
30. 10. 2018: Lecture Basic Programming Techniques in C++
  • C++: types, literals, declaration, and initialization
  • The C++ memory structure: stack, free store, static data and code segment
  • C++-classes: from struct to class, objects, member, this-pointer, public and private, constructor, new, initialization list, single inheritance
  • C++ language features
  • C++ functions, function overloading, default arguments
30. 10. 2018: Exercise Working on Exercises 2c and 2d
November 6. 11. 2018: Lecture The Design of a Graphical User Interface
  • The X-windows system: hardware, drivers, X-server, X-clients, window managers, mouse, and keyboard
  • Graphical elements: windows, and manipulations, such as zooming, resizing, and iconifying
  • Events in window systems
6. 11. 2018: Exercise Working on Exercises 2e to 4
13. 11. 2018: Lecture Graphical Systems and Introduction into Qt
  • The design of the Qt library
  • Events in Qt: Qt’s signals & slots concept
  • First steps in Qt: the tutorials
  • Qt’s implementation of signals & slots: the meta object compiler (MOC)
13. 11. 2018: Exercise Working on Exercises 5 and 6
20. 11. 2018: Lecture More Complex Widgets, Colors, and Proper Signatures
  • How MOC connects signal/slot names with methods
  • How to adapt different signatures in signals & slots
  • Colors in Qt
  • Timer objects in Qt
20. 11. 2018: Exercise Working on Exercises 7 and 8
27. 11. 2018: Lecture Dialogs, Applications and The Make Tool
  • Dialogs: how to implement, their internals, how to connect them with the application
  • The main application window: the menue bar, tool bars, the central widget, the status bar, and action objects
  • The Make Tool
27. 11. 2018: Exercise Working on Exercises 8-10
Dezember 4. 12. 2018: Lecture Advanced Design and Implementation Techniques Part I
  • Using declarations/directives
  • Templates in C++
  • Namespaces in C++
  • Basics left overs: enumerations, const class members, input and output, references, and functions (call by value, call by reference, call by const-reference)
  • Memory leaks
  • Classes: destructor, constructors from one \ or more arguments, default constructor, copy constructor, copy assignment
4. 12. 2018: Exercise Working on Exercises 10a and 10b
11. 12. 2018: Lecture Advanced Design and Implementation Techniques Part II
  • Operator overloading
  • Abstract classes with protected/pure virtual functions

Error Handling and the Standard Template Library
  • Exceptions mittels try and catch
  • Standard Template Library
  • Generic programming and basic model: algorithms, containers, and iterators
  • Predicates: functions, functions objects, lambdas, and inline code
  • Automatic and range-based loops
11. 12. 2018: Exercise Working on Exercises 10c and 10d
18. 12. 2018: Lecture Error Handling and the Standard Template Library
  • Exceptions mittels try and catch
  • Standard Template Library
  • Generic programming and basic model: algorithms, containers, and iterators
  • Predicates: functions, functions objects, lambdas, and inline code
  • Automatic and range-based loops
18. 12. 2018: Exercise Working on Exercises 10e to 10g
Januar 8. 1. 2019: Exercise Working on the final programming project: developing and testing various concepts
15. 1. 2019: Exercise Working on the final programming project: design and implementation of low-level widgets
22. 1. 2019: Exercise Working on the final programming project: bringing everything together
29. 1. 2019: Lecture Final Project Presentation 29. 1. 2019: Exercise Preparing for the project demonstration