Intermediate software development using Java

Questions about this course?

Questions about applications?

Apply now!

Bioinformatics Education Online

Course provider:
The University of Manchester
Course contact:
John Sargeant (johns@cs.man.ac.uk)
Summary:

Aims

This course is designed to introduce students to further language constructs and important API features while continuing to stress fundamental principles and best practice throughout. Students should attain both a reasonable level of competence and an awareness of the limits of that competence.

Learning outcomes

A student successfully completing this module should be able to:
  • Develop small Java applications (10-20 classes) in accordance with best practice, including making simple design and technology-choice decisions.
  • Handle concurrency safely in simple cases, and know when to call an expert!
  • Make appropriate use of the most common APIs for networking and for storing persistent data.
  • Learn about and use other APIs not taught in the course in a sensible and efficient manner
  • Be able to apply a range of standard techniques (e.g.. simple design patterns) to relevant situations.
  • Make appropriate use of simple UML notation
  • Ensure that applications are not unnecessarily inefficient without introducing gratuitous complexity.
Syllabus:

Introduction and review

This theme will introduce the course and review the key concepts from the introductory course.
  • Introduction
  • Basics
  • Inheritance
  • Exception handling
  • Collections
  • GUIs
  • Streams

Other language features

This theme will review the main language features omitted from the introductory course, other than those involved in concurrency.
  • Recursion (including structural recursion combined with polymorphism)
  • More nuts and bolts
  • Static things
  • Inner classes (and their application to event handling)
  • Reflection
  • Generic types revisited
  • Best practice: testing

Algorithms and data structures

This theme is an introduction to the traditional topic of data structures and algorithms, structured to help the student focus on the important issues, particularly in terms of performance
  • Introduction
  • Review of computational complexity
  • Sorting and searching
  • Trees
  • Dynamic programming (edit distance)
  • Heuristics (pre-filtering for edit distance)
  • Best practice: performance myths and priorities

Concurrency

This theme provides the basic concepts and Java constructs of concurrency. It stresses the complexity of concurrent programming compared to ordinary sequential programming.
  • Thread concepts
  • Creating threads and running them
  • Synchronisation and communication between threads
  • Example: a clock applet
  • Best practice: code review

Storing and manipulating external data

This theme covers techniques and APIs for storing and manipulating external data other than using a database.
  • general issues (unique identifiers, schema evolution, impedance mismatch
  • )
  • Object serialization
  • XML concepts
  • XML APIs
  • Regular expressions
  • Example: storing exam data
  • Best practice: choosing external representations

Basics of OO design

This theme steps back from specific technologies and helps the students to make the transition from writing programs from given designs to making basic design decisions of their own.
  • Iterative development
  • Keeping it Simple
  • UML notation
  • Assigning responsibilities to classes
  • Protecting against variation
  • Design patterns: a sneak preview
  • Case study

Networking and client-server systems

This theme builds on all the previous ones by bringing the students to the stage where they can build simple client-server systems.
  • Basic networking concepts
  • Java.net?
  • Servlets (vs applets)
  • JSP
  • Security issues
  • Best practice: negotiating the technology maze
  • Case study

Relational databases

This theme is primarily intended for Bioinformatics students and will be optional for others.
  • RDB concepts
  • SQL
  • Mapping classes to relations
  • JDBC
  • Basics of normalisation
  • Transactions
  • Best practice: when and how to use a RDB
  • Case study

Other OO languages

This theme is intended for students (particularly in Computer Science) who will learn about relational databases elsewhere.
  • C++ overview
  • C++ manual storage management
  • C++ inheritance
  • C#
  • Python
  • Non-OO languages
  • JNI
  • Best practice
  • Case study
Further details:

Prerequisites:

The basic Java course or equivalent experience.

Assessments:

  1. There will be 4 exercises, 10% each.
  2. Three projects worth 25%, 25% and 10% respectively.
The exercises will be common to all students. There will be separate projects for Bioinformatics and CS students.
Technical requirements:
References:

Back to module page
Home

Updated 2 July 2009 by Heather Vincent