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