CS 313 Intermediate Computer Programming
This course will teach you to become familiar with the conventional methods for software development, introduce good development practises (eg creating javadoc documentation, naming and coding style conventions), the tools of the trade(eg use of version control systems), and how to collaborate on a software development team. Students will become acquainted with libraries to facilitate the development of common graphical desktop applications. Basic software engineering techniques will be heighted and practised in two separate group projects. (waterfall/phased and agile). Students will be introduced to the use of the MVC architecture, and while studying classes and object inheritance, will explore common design patterns (eg Singleton, Observer, Factory etc). Students will learn to program against a database, as well as have an introduction to network programming (http I/O). An introduction to programming in C/C++ will be given, and depending on progress of the class, additional lectures that introduce mobile application programing and programming with C# or J2EE will be explored.
- Students will be able to make use of good software engineering practices to develop moderately sized applications Learn to use common versioning systems and for collaboration.
- C++ Programming Students will be able to Write console applications in C++ Use pointers correctly Reuse code by means of inheritance
- Java programming: Students will Become very proficient Java programmers Make use of inheritance and object hierarchies Write applications with GUIs using model-view patterns Write multi-threaded applications Manipulate data in files Be introduced to the Collections framework. Be able to write networked applications (including network IO)
ASHESI LEARNING GOALS ADDRESSED IN THIS COURSE:
- Leadership and teamwork: Students will work on some projects in teams and will learn to collaborate with others to create a viable product.
- Curiosity and Skill: Students will be expected to explore a few new technologies beyond what is taught in class, on order to accomplish some projects 3. Technological Competence: Students will acquire specialist knowledge in application development.
- Communication: An Ashesi student is an excellent communicator in a variety of forms. This course requires students to document the requirements of at least one major project (similar to Software Engineering). It is a form of technical communication.
*Software development practices: Javadoc documentation, Coding conventions, use of GIT, command line compilation, command line parameters. Basic use of UML diagrams and software engineering (use case, activity, class diagrams, requirements elicitation) Also use of class relationship collaboration (CRC) cards in Object Oriented Analysis and Design (OOAD). JUnit testing. Design Patterns (including Singleton, Factory, MWC, Iterator, Observer and Front Controller), MVC. Overview of SW Engineering methodologies (waterfall and agile) *Java topics: Objects and inheritance (including abstract classes, packages, nested/inner classes), Review of String and date manipulation, error handling and enumerated types. Function parameter passing. File I/O (new topic: random access files & serialization), network I/O with URLs, Collections framework and Maps (Arraylists, TreeSets, HashMaps etc.), Threads, Introduction to Swing, GUI applications with IDE tools, Database connectivity from Java application, MVC architecture. Printing in Java. *C++ topics: Basic IO, control structures, and loops, formatting of output. Comparison to Java, Exception handling, function overloading, parameter passing, introduction to pointers and pointer arithmetic, dynamic arrays , structures, typedefs, functions, classes, inheritance, dynamic instantiation, operator overloading, File I/O and data structures using classes in C++
Lab session consist of individual programs written in lab, as well as a few group projects.
- Lab 1: Creating documentation, Command line parameters, using GIT, use of command line tools: javadoc , packaging applications using jar
- Lab 2: Collaborative team development, Working with GIT in a team, work on remote server at command line
- Lab 3: Fisherman Problem: loops, arrays etc.
- Lab 5: collections, java GUI, data entry, tables, “data structures? & reporting
- Lab 6: java file IO, Network IO
- Lab 7- pointers
- Lab 8: plot histogram (C/C++)
- Lab 9: C structures, pointers
- Lab 10: C++ classes lab 11: C/C++ file/IO GUI Projects: (one group project, one individual project) Two java GUI applications with a variety of mandatory UI controls, database connectivity, must use MVC and demonstrate design patterns, documentation, be packaged
- Prerequisites: Programming 2 / Programming for Computer Science or Computer Programming for Engineering