COMP315 – Advanced Programming

Advanced Programming
COMP315
Course outline 2015
Lecturer
Christopher Rae
E-mail:
chris-rae.com | http://advancedprogrammingmirror.pbworks.com
[email protected] include in subject: COMP315
Objectives
Programming often requires learning of new technologies in a short space of time. Programming
languages also develop over time incorporating new ideas and paradigms to accomplish previously
verbose tasks in a more efficient manner. In order to be a professional programmer one must draw
on previous experience and nurture the skill of knowledge acquisition. Experience gained through
this course is intended to give students a foundation to build upon. Knowledge acquisition is vital in
the ever changing world of Computer Science, Information Technology and Software Development.
This course aims to prepare students for this by pursuing the following objectives:




Introduce students to a new programming language [C++]
Explore advanced programming concepts
Managing and planning a large programming project [Design Patterns]
The use of third party libraries [OpenGL]
Timetable
Monday
Tuesday
Thursday*
Friday
Lecture (G24)
10:30 – 12:10
7:45 – 8:30
13:15 – 14:00
Consultation (F48)
8:40 - 10:20
8:40 - 10:20
Practical (G24)
14:10 – 16:45
*This slot will only be utilized as and when advised or agreed, for tests and additional lectures.
It will be used in the second, third and fifth week in order to facilitate in content delivery.
Assessment
There will be 2 continuous assessment tests. The tentative dates for these are as follows:


Test 1 – 5th of March 2015
Test 2 – 7h of May 2015
There will be an individual project whose deliverables and tentative due dates are as follows:




Design document – 13th of March 2015
Project technical demo assessment – 9th of April 2015
Project due – 24th of April 2015
Presentation – 30th of April 2015
In order to obtain a DP for the course, the following requirements must be met:


Attendance of 80% of the practicals
Class mark of at least 40%
Assessment marks will be calculated as follows:



Project mark = (0.1 × Project technical demo) + (0.5 × Project artefact, 0.1 × Project
documentation) + (0.2 × Design document) + (0.1× Final presentation)
Class mark = 0.5 × (Test1 + Test2)/2 + (0.5 × Project)
Final mark = (0.5 × Class mark) + (0.5 × Exam mark)
Comp315 Brief Contents Outline
Section
Introduction to c++
Compound data types
Object Oriented C++
Advanced C++ concepts
C++ standard library
C++ standard template
library
Advanced programming
Software Project
Details
C++ background, design, basic input and output, data types, operators and
functions
Arrays, Pointers and Dynamic memory
Structures, Classes, Inheritance and Polymorphism, Design patterns
Templates and pre-processor directives
Strings and File Input/Output
Containers, Iterators and Algorithms
Third party library use, problem solving
Project design, graphics and graphical user interface
Learning Outcomes












Ability to write efficient C++ code for specific tasks
Test and Debug large programs for bugs and errors
Implement complex programming tasks
Utilize advanced C++ features such as templates and macros
Utilize the C++ STL
Familiarity with the C++ compilation model
Understanding of memory management
Processing user input
Ability to evaluate different coding solutions
Understanding of GUI through GUI creation
Ability to use third party libraries
Implementation of an individual programming project
Teaching approach
Advanced programming is a course that focuses on the practical aspects of programming because of
this lectures will be conducted in the labs. Theory will be covered in lectures however there will also
be a number of class exercises. Through class exercises and practicals you are expected to build up a
portfolio of programming work. This work is yours but you should have the understanding to explain
it to someone else. The exam and in class tests will be written. It is recommended that you maintain
all your questions and solutions.
This course is not intended to re-teach you the basics of programming. It is intended to enhance
your knowledge of programming and the depth of your ability. This is done by learning a new
programming language and using a third party application programming interface (API) also known
as a library. For this reason the start of the course will draw a direct comparison to the language you
are familiar with, Java. This is done to refresh your memory but also to allow you to see the
differences and nuances between different programming languages.
This year’s project will be an individual project. For this project you will explicitly adhere to a chosen
coding style such as Hungarian notation or CamelCase. Adherence to the standard will be graded in
your project. You will also be expected to produce documentation in the form of a design document
for the graphical user interface, UML diagram(s), commented code and a user guide. There will be a
technical demo assessment; this is intended to see how quickly your progress has been made. It is
there to give you feedback and suggestions. It is also there for you to point out features of your
project.
This year the project will be done in OpenGL. This will give you a basic introduction to computer
graphics. With this in mind the course must cover the aspect of graphical user interface design. For
this reason you are to study popular graphical user interfaces in order to develop your own (within
your capabilities). You will create a design document for your own graphical user interface, for your
project. This is intended to draw your attention to software architecture, research and development
and for you to study the programming project. OpenGL is used for the creation of Games on various
devices (PC, Android), CAD application development (Blender, Autodesk Maya) and fields such as
virtual reality.
An item of feedback regarding this course has been that problem solving for the exam has not had
enough time allocated in lectures. This will be addressed with some lectures being allocated to
problem solving for exam style questions.
I will be responsible for the setting and marking of all your tests, assignments and exam but I will be
in consultation with Mandla Gwetu ([email protected]) regarding these. Should you have a
concern you may approach me or indirectly approach me through the class elected student
representative. The student representative will be chosen by their peers and will relay concerns and
issues raised by other students as a means of streamlining feedback. As a last resort if you feel you
can not approach me about an issue, then you may contact Mandla. Feel free to communicate your
feedback regarding lectures and practicals to me or through the student representative. You may
consult with me via e-mail.
Resources

In preparing for this course I have consulted the following websites regularly. These will be
useful resources to consult during this module:
o http://www.cplusplus.com
o http://www.learncpp.com
o http://lazyfoo.net/tutorials/OpenGL/

Supplementary lecture notes, practical guides and resources will be uploaded onto Moodle
and PBWorks (as a Mirror):
o Moodle: http://moodle.cs.ukzn.ac.za/
o PBWorks: http://advancedprogrammingmirror.pbworks.com
You may consult any text book that covers C++, STL, C++ GUIs and OpenGL. I recommend
consulting the following text books:
o Thinking in C++: www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
o Red book OpenGL: http://www.glprogramming.com/red/
o Blue book OpenGL: http://www.glprogramming.com/blue/
o Scott Meyer’s Effective STL: http://www.uml.org.cn/c++/pdf/EffectiveSTL.pdf
The software tools required for this module will include:
o C++ Compiler (GNU GCC compiler)
o C++ IDE
C++ is a popular language and there are a variety of tools available to compile code. I would
highly recommend using the Netbeans IDE. If you wish to use a different IDE, it must be
available in the CS Lan. The intent is that your programs must compile and run on the image
of Fedora installed in the labs.
The lecturer will utilize the following tools for teaching purposes:
o GCC C++ compiler
o Netbeans C++
o OpenGL




Lecture Plan
Week
9 - 13 Feb
Monday
Introduction to C++ programs,
syntax, variables, operators and
header files
16 - 20 Feb
Namespaces, Classes,
structures, enums and
constructors
23 - 27 Feb
Arrays and Strings, Memory
addressing, Dynamic memory
Inheritance, polymorphism and
abstraction
Design Patterns
STL, Associative containers and
STL Algorithms
Pointers
23 - 27 March
3D drawing in OpenGL, Vectors
and Matricies in OpenGL
Macros and templates
3D Collision
detection
File input and
output
30 - 3 April
6 - 10 April
Easter vac
Family Day
13 - 17 April
20 - 24 April
27 - 1 May
STL Algorithms
Revision topic
Freedom day
4 - 8 May
Revision topic
11 - 15 May
Revision exercises
18 - 22 May
Revision
25 - 29 May
Lectures end, Final date for
submission of DP Appeals to
School Offices
2 - 6 March
9 - 13 March
16 - 20 March
Tuesday
Functions
and Basic
input and
output
Passing by
reference and
value
Thursday
Friday
Prac 1
Introduction to
OpenGL,
APIs and
libraries
2D drawing in
OpenGL
Test 1
Prac 2,
Registration
ends
Lighting and
Cameras
OpenGL
Prac 5, GUI
design
document due
Prac 6, Project
work
Project work
Problem
solving
exercises
(Monday
timetable)
Project
Technical
Demo
assessment,
(Friday
timetable)
Problem
solving
exercises
Revision
Project
presentations
Project
Technical
Demo
assessment,
Final date for
withdrawal from
a module
Project work
Project due
Project
presentations
STL,
Sequential
containers
2D Collision
detection
Revision
exercises
Revision , DP
refusals
published
(Wednesday
st
21 of May)
Study
Test 2
Prac 3
Prac 4
Project
presentations
Revision
Study
Exams
Exams