<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
  
  http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<html>
<head>
</head>
<body>
Description of tutorials.

<h2>Qi4j tutorials</h2>

<h3>Composite tutorials</h3>
<p>
Throughout this set of tutorials it will be shown how to create and work with Composites, which
is the basic element in Qi4j. We will refactor one HelloWorld class to take advantage of the various
features in Qi4j. These refactorings will make it easier to reuse parts of the class,
and introduce new features without having to change existing code. We will also look
at some of the existing classes, or Fragments, available in Qi4j that you can reuse
so that you don't have to write everything yourself.
</p>
<p>
Each tutorial in this series starts with the result from the previous tutorial, so you can
always look at the next tutorial step for guidance on what to do.
</p>
<h2>Related Documentation</h2>
<p>
For more information on Qi4j see <a target="_blank" href="http://www.qi4j.org">the website</a>.
</p>
</body>
</html>
