COMPUTER SCIENCE
 
 
TABLE OF CONTENTS
 

You will find here references (Web sites and books), 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 class them in categories. Most of the sites referenced here are in English. If not, there is an indication. The categories that propose documents or source code directly in this site are tagged with an * in the table of contents that follows.

 
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 has just came out. It remains slow and does not implement some important notions of the object-oriented approach such as the generic classes.

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. Here are documents on this site concerning object-orientation.


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


  • 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.


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

Here is a selection of Web sites rather made for experienced people on the subject.

Here are some books on object-orientation.

  • Object-Oriented Design with Applications.
    Grady Booch.
    1991, Benjamin/Cummings.

  • Object-Oriented Software Construction.
    Bertrand Meyer.
    2000, Prentice Hall.

  • Object-Oriented Approach.
    John W. Satzinger, Tore U. Orvik.
    1996, Boyd & Fraser.

  • Modélisation objet avec UML.
    Object Modeling with UML.
    Pierre-Alain Muller.
    1997, Eyrolles.

 
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. Here is a selection of Web sites that discuss software reuse and reusability.

Here are some books on software reuse.

  • Software Reuse.
    Bernard Coulange.
    1998, Springer.

  • Software Reuse.
    Ronald J. Leach.
    1997, McGraw-Hill.

  • Design Patterns: Elements of Reusable Object-Oriented Software.
    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.
    1995, Addison-Wesley.

 
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).

Here is a selection of Web sites that discuss computer simulation.

  • Systems Simulation
    Course on discrete-event modeling and simulation.

  • SCS Publications
    List of articles on computer simulation.

  • Visual Simulation Environment
    Information about VSE (Visual Simulation Environment), an environment for visual simulation based on an object-oriented design.

  • Framsticks
    A fascinating project on three-dimensional life simulation.

  • GA-Walk!
    Funny and interesting Java program on walking techniques of artificial skeletons.

Here are some books on computer simulation.

  • Discrete-Event System Simulation.
    Jerry Banks, John S. Carson, Barry L. Nelson.
    1996, Prentice-Hall.

  • System Simulation.
    Geoffrey Gordon.
    1978, Prentice-Hall.

  • Object-Oriented Analysis and Simulation.
    David R.C. Hill.
    1996, Addison-Wesley.

  • Simulation, Modeling and Analysis.
    Averill M. Law, W. David Kelton.
    1982, McGraw-Hill.

 
THE C++ LANGUAGE
 

C++ is an object-oriented programming language that is widely used. But its use for a good object-oriented design can be difficult. A standard library, the Standard Template Library (STL), has been developed to provide useful reusable classes as containers. This library is now provided with any C++ compiler. Here are documents on the language that I wrote, some of them for courses at an engineering school.

  • (in French)
    This course is for people that 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...).


  • 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.

Here is a selection of Web sites that deal with advanced C++ concepts as well as basic notions, and with the STL.

Here are some books on C++.

  • The Annotated C++ Reference Manual.
    Margaret A. Ellis, Bjarne Stroustrup.
    1995, Addison-Wesley.

  • The C Programming Language.
    Brian W. Kernighan, Dennis M. Ritchie.
    1988, Prentice-Hall.

  • More Effective C++.
    Scott Meyers.
    1996, Addison-Wesley.

  • C++ Templates: the Complete Guide.
    David Vandevoorde, Nicolai M. Josuttis.
    2003, Addison-Wesley.

 
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. Here are documents on the language that I wrote, some of them for courses at an engineering school or at a university institute of technology (IUT).

  • (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++.

Here is a selection of Web sites on the Java language.

 
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.

Here are two courses that I gave at a university institute of technology (IUT).

  • (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.

Here is a selection of Web sites on operations research.

Here are some books on operations research.

  • Introduction to Algorithms.
    T. Cormen, C. Leiserson, R. Rivest.
    1990, MIT Press and McGraw-Hill.

  • Introduction to Operations Research, 6th Edition.
    Frederick S. Hillier, Gerald J. Lieberman.
    1995, Mc Graw-Hill.

  • Optimization in Operations Research.
    Ronald L. Rardin.
    1998, Prentice-Hall.

  • Network Flows: Theory, Algorithms, and Applications.
    Ravindra K. Ahuja, Thomas L. Magnanti, James B. Orlin.
    1993, Prentice-Hall.

  • Optimisation combinatoire: méthodes mathématiques et algorithmiques.
    Combinational Optimization: Mathematical and Algorithmic Methods.

    Michel Sakarovitch.
    1984, Hermann.

  • Graphes et algorithmes.
    Graphs and Algorithms.

    Michel Gondran, Michel Minoux.
    1979, Editions Eyrolles.

 
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 with the user (with JavaScript), to allow the access to information stored in databases (with PHP for instance), and to provide embedded applications (with Flash/ActionScript, Java...). Here are some courses that I taught at a university institute of technology (IUT).

  • (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 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.

Here is a selection of Web sites on the various languages useful for the conception of Internet sites.

  • W3 Schools
    Tutorials and references for almost all the languages of Internet.

  • Tout JavaScript
    Scripts, tutorials and references for the JavaScript language, in French.

  • PHP.net
    Tutorials and references for the PHP language.

  • PHP France
    Tutorials and references for the PHP language and the MySQL manager, in French.

  • Startjeux.com
    Site dedicated to programming, in French. You will find there lessons, scripts, exercises and links on the PHP, JavaScript and HTML languages.

  • Loïc's Page
    Full course on the HTML language, in French.

 
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.

Here is a selection of Web sites about mathematics and geometry (in French).

  • Infographie
    Course on computer graphics that starts with the most simple drawings to deal progressively with 3D, complex surfaces... The algorithms are clearly explained and examples are proposed in C.

  • Mathématikos
    Animated applets to illustrate various mathematical concepts.

  • Imageo
    Rediscover some geometrical properties with this applet.

  • LaboMath
    Some applets building fractals, curves...

Here are some sites on stereograms, these images you must squint on to see appearing a 3D form.

 
MISCELLANEOUS
 

I put there Web sites related to computer science that can not fit in any category above, but that still very interesting.