COMPUTER SCIENCE
 
 
TABLE OF CONTENTS
 

You will find here documents (PhD and MS theses, courses, articles...), source code (C, C++ and Java) concerning various areas of computer science. I did the best I could to classify them in categories.

 
HYPERMEDIA SYNCHRONIZATION PROBLEMS
AND REUSABLE COMPONENTS FOR GRAPHS
 

This is the thesis of the PhD I made from lately 1998 to early 2003 at the LIMOS Laboratory, under the supervision of Professor Philippe Mahey. This work is oriented around two axes. First, use operations research techniques in order to solve synchronization problems that occur in the conception and the presentation of hypermedia documents. Second, explain the reasons why the design of a library of reusable components for graph problems can not follow the classical rules of software engineering, and propose some conception solutions.

The actual formats used to publish documents on the Internet bring, without discussion, new facilities compared to the traditional materials. But needs are still growing and new languages appear regularly, attempting to improve the structure and the interactivity of documents. Among these languages, some offer the possibility of animating and synchronizing media components. But the variety of these components (audio, video, text, image...) makes the animation a difficult problem. The problem studied here consists in finding a good adjustment of the durations of the components so the presentation progresses as close as possible to what the author wants.

The problem can be modeled, after some restrictions, as a minimum cost tension problem in a graph. To solve it with piecewise convex costs, we studied different methods (linear programming, out-of-kilter, cost-scaling on the dual). We also propose methods to solve the problem on specific classes of graphs, the series-parallel or almost series-parallel graphs, more representative of the real cases of hypermedia synchronization.

For this study, we have developed a library of reusable components for graph problems. The thesis contains then three chapters on this issue. First, the reusability in a general way is tackled, explaining why operations research can not be dealt classically by software engineering. Then, a quite complete presentation of the object-oriented approach is proposed, insisting on the efficiency and reusability aspects of the various concepts. We finally present design patterns for the development of generic components for operations research, and propose a quick overview of the various issues, more technical, met in the design of a portable and reusable library.

 
 
CREATION OF LIBRARIES OF REUSABLE MODEL
COMPONENTS FOR THE VISUAL SIMULATION ENVIRONMENT
 

This is the MS thesis I made in 1998 during a five-months stay at the Virginia Tech University with Professor Osman Balci. This report contains a quiet complete overview of the object-oriented concepts, a presentation of computer simulation and more precisely discrete-event simulation. There is also a discussion about software reuse and reusability. Finally, these concepts are illustrated with the presentation of libraries made with VSE (Visual Simulation Environment) for the purpose of visual simulation.

There are three libraries. The first is an experimental design about the moving of objects in a two-dimensions layout. It can be used as a start to create a better designed and more complete reusable library. The second library provides a class to manipulate dates in the Gregorian calendar. We think its presentation can be useful for someone who wants to develop a similar portable and reusable library in another language. The last library is not presented in this HTML version, which is not the full report but only a gathering of the most interesting chapters.

 
 
B++ LIBRARY & JIRK++
 

How to write a program that can be used under any platform ? Except Java, there is no direct solution. Unfortunately, Java had just came out when the project started. It remained slow and did not implement some important notions of the object-oriented approach (especially the generic classes). Since, Java has evolved and proposes the use of generics, but their efficiency is limited (due to the type erasure mechanism).

B++ Library is a thread-safe C++/Java library of almost 90000 lines of source code that I am actually developing as part of my research. It mainly provides components for operations research and simulation, but is built on an object-oriented base that guarantees some portability and favors the reusability of the designed components. This portability was tested under Linux, Unix and Microsoft Windows environments with different compilers. Various programs were also developed to test the reusability of the components of the library.

B++ Library does not provide its own graphical interface, to guarantee its portability would be almost impossible. However, it proposes the Jirk++ mechanism that allows the manipulation of any Java class directly in C++. The Java graphical components are thus available in the library.

Small programs, the B++ Tools, were developed with this library. They are available for Microsoft Windows. Their source code can be found in the B++ Library.

 
 
OBJECT-ORIENTED DESIGN AND MODELING
 

Most of the programming languages and software now use object-oriented concepts. Although it is a natural way to model the reality, object-orientation is difficult to master when you want to clearly model a complex system or smartly design software.

  • (in French)
    This course introduces the fundamental concepts of object-oriented programming: notions of object and class (messages, encapsulation...), relationships between classes (inheritance and polymorphism, aggregation, association...). More advanced concepts are also tackled: multiple inheritance, abstract classes, interfaces, generic classes...


  • Chapter of my PhD thesis (in French), it presents in details the main concepts of object-orientation, discussing specifically about the advantages and drawbacks of each in terms of efficiency and reusability.


  • Chapter of my MS thesis, you will find there the bases of object-oriented modeling.

  • (in French)
    Some guided works on UML, the Unified Modeling Language, a world wide formalism for object-oriented modeling, that I gave at an engineering school.

 
SOFTWARE REUSE AND REUSABILITY
 

Software reusability has become an economic challenge. Indeed software developers usually need to reuse parts of old software to design new one. Software reusability can be a gain of time in a long term sight. Moreover, lots of companies have not the sufficient knowledge to develop themselves parts of their software, or do not want to invest in it. Hence they look for libraries they can use directly. Finally, the object-oriented approach is well adapted to guarantee software reusability, that is why the two domains are tightly related.

  • (in French)
    This course is for people who are accustomed with object-oriented programming, and are interested in the design stage of software. It presents design patterns, which provide proven conceptual solutions to tackle recurring issues in software development.


  • Chapter of my MS thesis, which discusses the concept of reusability in software development.


  • Chapter of my PhD thesis (in French), which presents software solutions to design reusable components for operations research.

 
OBJECT-ORIENTED SIMULATION
 

Computer simulation is a vast domain, with different kinds of simulation. We mainly consider here discrete-event simulation using the object-oriented concepts. The B++ Library presented previously provides a simulation module called B++ Simulator. This framework allows discrete-event simulation with visual animation based on object-oriented technology (C++ and Java).

 
THE C++ LANGUAGE
 

C++ is an object-oriented programming language that is widely used, notably in the scientific field. It also enables generic programming on which the Standard Template Library (STL) is based. This approach is complementary to object-oriented programming, with mechanisms achieved during compilation that can avoid some processing at execution time.

  • (in French)
    This course is for people who already know C++ and want to learn more about the concepts of C++ (multiple and virtual inheritance, abstract classes and interfaces, operators overloading, templates and partial instantiation, exceptions, RTTI mechanism, STL library...) and the object-oriented programming (design patterns...).

  • (in French)
    This document is a complement to the previous course on C++. It briefly introduces generic metaprogramming, approach that is based on the mechanism of static specialization for template components. Several examples are presented: partial evaluation, traits classes, metafunctions, structures of types (typelists), template expressions.

  • (in French)
    This document presents the new possibilities provided by the C++11 standard. It gives a general overview of the changes since the C++03 standard, especially concerning the design of classes and generic programming. Some of the new concepts in the language are detailed: the rvalue references (i.e. the new syntax &&) and the move operators, the variadic templates, and the lambda expressions.

  • (in French)
    This document is for people who already know object-oriented programming and want to learn the bases of the C++ language (syntax, memory, pointers, classes, inheritance...) through the design of classical algorithms and data structures (arrays sorting and linked lists handling).


  • A UML diagram that describes the relationships and the main functionalities of the containers (sequences, sets, associatives...) of the STL.


  • Research report that explains how to design algorithms for operations research that are both generic and efficient. A test package implementing the solutions discussed in this document is proposed to allow efficiency comparisons between the different designs.


  • Research report that describes template metaprogramming techniques in C++ for declaring concepts, "modeling" relationships (between a type and a concept) and "refinement" relationships (between two concepts), and for controlling template specializations based on a taxonomy of concepts. A library called C4TS++ implements the solution presented in this report.


  • Research report that studies the design of expression templates (i.e. templates that represent expressions and are usually built through operator overloading) with concepts to ease the development of an embedded domain specific language. A library called ETC++ implements the solution presented in this report.

 
THE JAVA LANGUAGE
 

Java is also a widespread object-oriented language. It is younger and owes its fame to its easy syntax (compared to C++), to the richness of its libraries (multimedia, network...) and to its portability.

  • (in French)
    This course is meant for people who already know C++ and want to learn quickly the bases of Java. It presents the basic concepts of the Java language: classes and inheritance, data structures, streams, graphics with AWT, exceptions, threads...

  • (in French)
    This document is a synthesis of courses taught at different levels. The first part is meant for beginners who want to learn the bases of the language. The second part tackles more advanced notions of object-oriented programming (interfaces, inner classes, design patterns...) and generic programming (generic classes and methods, "concepts", constrained types...), through several libraries (streams, collections, graphics with Swing, threads...).

  • (in French)
    Series of exercises on classical data structures: arrays, linked lists, stacks, queues, binary trees...


  • Small Java applets (clocks, 3D animation, fractals, graph animation, Tetris...) with their source code.


  • Module of the B++ Library, which allows the manipulation of any Java class directly in C++. Thus, the Java graphical components, for instance, are available in C++.

 
OPERATIONS RESEARCH & ALGORITHMIC TECHNIQUES
 

Operations research is a domain that is difficult to grasp. Indeed, it uses mathematics as a theoretical tool with the aim of a computerized application, one of the difficulties being the transition between theory and practice. It offers methods and algorithms to solve a wide range of problems that can not be solved without the computers. It can be simple algorithms like the search of a shortest path between two points, or sophisticated methods like the resolution of complex mathematical systems.

  • (in French)
    This course is an introduction to operations research. It presents classical problems and methods: the shortest path, the PERT method, the minimum spanning tree, the maximum flow, the linear programming...

  • (in French)
    This course is preliminary to operations research. It presents classical data structures: arrays, linked lists, stacks, queues, binary trees... The source code of these structures is available in C and Java. To understand better the binary trees and how they are balanced, a Java applet is provided. (C and Java) are also available.

 
WEB PROGRAMMING
 

The design of Internet sites requires the knowledge of several languages in order to achieve a good presentation of the information (with HTML and the CSS style sheets), to provide some interaction to the user (with JavaScript and more recently TypeScript), and to allow the access to information stored in databases (with PHP for instance).

  • (in French)
    This course explains how to use the JavaScript language to insert dynamism into HTML pages. In addition to the language, it introduces the bases of object-oriented programming, a part of the UML formalism (the Unified Modeling Language), and the notion of event essential for the conception of user interface.

  • (in French)
    This course explains how to use the TypeScript language to design dynamic and interactive software, like animations or games, that can be integrated straight into Web pages. TypeScript is a superset of JavaScript that allows filling some lacks such as object-oriented programming and static typing of variables. This document also presents some elements of object-oriented programming, and the notion of event essential for the conception of user interface.

  • (in French)
    This course presents how to use the PHP language and the MySQL database manager to design an information system with a Web interface. It explains how to interact with a database manager like MySQL in order to provide a dynamic content and to allow a possible online modification of this content.

  • (in French)
    This course presents how to build a content management system (or CMS) using the PHP language and the MySQL database manager. There are two goals: first, to understand what is behind widespread CMS like DotClear or SPIP; then, to be able to build its own collaborative site that will be more appropriate to its needs.

  • (in French)
    This course explains how to use the ActionScript language to design dynamic and interactive software, like animations or games, in a Flash application. It also presents some elements of object-oriented programming, and the notion of event essential for the conception of user interface.

 
GRAPHICS
 

With a language like Java, it is very easy to make graphics. Here are some documents I made after coding Java applets. They explain the principles used to program them. So for each topic, you will find an explanation and an implementation with a Java applet, of which source code is of course available.


  • This document details a method to draw an object in 3D on a computer screen and how to move in this 3D environment.


  • This document just explains how little fractals like the "snowflake" are built.