COMP315 – Advanced Programming
Transcription
COMP315 – Advanced Programming
Advanced Programming COMP315 Course outline 2015 Lecturer Christopher Rae E-mail: chris-rae.com | http://advancedprogrammingmirror.pbworks.com stingrae789@gmail.com 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 (Gwetum@ukzn.ac.za) 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