# Modelling

Schools:
Computer Science: Software Engineering Theoretical Computer Science
Mathematics: Mathematical Logic & Foundations
Modelling in Computer Science is about describing Software or Systems (Software+Hardware) based on simple formal languages. For example a Use-Case-Model is often used as a Model of a program. It uses a formal language together with pieces of natural language. It is usually noted graphically. It is far from describing the program completely. It's aim is to capture certain aspects of the program.
Therefore it's formal language is very little expressive (much less than e.g. a structured programming language): this is restrictive on one hand, but on the other hand is very helpful to keep it simple in the first place. This trade-off is a central issue in considering modelling languages.

## Why Modelling is important to Computer Science

* Although software development in the end delivers programs it is not mainly about programming.
* The critical jobs in software development lie in analysis (i.e. understanding of the customer) and design (i.e. deciding on the software architecture).
* Analysts and Designers (Architects) mainly work and think in models, e.g. of Use Cases, Component Structures etc.
* Thus modelling is central to industrial software development (i.e. neither programming nor technical writing is).
* Modelling is about reducing complexity by focussing on certain aspects of a program, like its components and their interfaces in one view and the states of this system in another diagram.
* Modelling is done employing modelling languages, like Entity Relationship Diagrams or UML.
* The single parts of modelling languages are less expressive than a programming language, a component model is mainly a simple relation among its elements far from the expressive power of a type 3-2-1-0 (i.e. programming-)language.
* This simplification of language is restrictive but useful to decompose the program to it's really important aspects (like the user-view or the overall structure) leaving the details to the implementation.
* Thus the quality of the model (e.g. the way the program is structured) is central for the further work.
* So it is important for people that work in software development on a conceptual level (especially for analysts and designers) to learn the trade of modelling, like programmers learn the trade of programming.
* As well as learning to program is not about learning instructions by heart, learning to model is not about learning all the elements of UML (or any other language).
* Instead, learning to model is about learning to differenciate good models from bad ones, to build good models efficiently, to form an opinion about a modelling language and to fit or even create a modelling language wrt certain purposes.
* This requires a good understanding about the concepts behind modelling languages.
* A well-structured course on modelling should teach the concepts behind modelling languages, starting from their basics in mathematics up to their application in real world languages like UML, SysML etc.
* Unfortunately there is no homogenous collection of such concepts today and also the coupling from basics to real world is very loose.
* So the concepts behind modelling still must be developed - not from scratch, since there is a lot that has been done already in different disciplines, but by bringing existing things together and showing their relevance to modelling.

## The Approach

* This course aims on a deep understanding of modelling. If some shallow knowledge is enough for your purposes you'll be happier with some good introduction to UML or similar.
* Goals:
** Sort out relevant theory, mainly in mathematics and theoretical computer science (also stating the prerequisites)
** Systematically(!) link theory to practical issues (i.e. some punctual examples of application are not enough!)
* By employing mathematical concepts for modelling purposes pure maths becomes applied maths
* Since Modelling is about very elementary languages the theoretical background can be found mainly among the more simple formal languages, like e.g. relational first order languages or regular languages.

## Some Syllabus

* Prerequisites:
** Propositional Logic
** Basic Predicate Logic
** Higher Order Logics
* Baseline
** Philosophy of modelling
*** Definition?
*** The Role of Sets
*** Typical scenario
** Basic Set Theory
*** Basic operations
*** Modelling with sets
** Algebraic Descriptions
* Classification and Formal Concept Analysis
** Equivalence classes
** Concept
* Relationships and Basic Finite Model Theory
** Relational first order models
** Characterisation of finite models
** Describing properties of finite models
* The useful parts of Graph Theory
** Important properties of finite relational models
** Relational patterns
* tbc ...
* What this subject is not about (differences and similarities)
** Theories of Programming (Programming vs. Modelling)
*** ... although the basic idea is very similar
*** but as a software designer your job is modelling not programming