CS2030 Programming Methodology II
AY17/18 Semester 2
This module is a follow up to CS1010. It explores two modern programming paradigms, object-oriented programming and functional programming. Through a series of integrated assignments, students will learn to develop medium-scale software programs in the order of thousands of lines of code and tens of classes using object-oriented design principles and advanced programming constructs available in the two paradigms. Topics include objects and classes, composition, association, inheritance, interface, polymorphism, abstract classes, dynamic binding, lambda expression, effect-free programming, first class functions, closures, continuations, monad, etc.
- Lecture: 10am - 12noon, every Monday
- Venue: LT19
- Instructor: Ooi Wei Tsang (firstname.lastname@example.org)
- Teaching Assistant:
- Lan Ziquan (email@example.com)
- UG Tutors:
- Bernard Teo Zhi Yi
- Chang Ho Huan
- Chung Zhi Li, Denzel
- Evan Tay
- Ho Boon Wee Addison
- Jeremy Lim Yu Xuan
- Joshi Atharv Abhay
- Lim Heng Guang
- Lin Si Jie
- Ong Yan Zhi
- Qiu Siyu
- Tan Thong Cai, Nelvin
- Tay Hui Chun
- Teh Zi Cong Nicholas
- Thangavel Sharan
- Triston Pang Erh Syen
- Winson Heng Yong Seng
- Yuen Jun Rong
- Lab: Every Tuesday (Week 3 - Week 13)
- Midterm Test: March 5, 2018, Monday, 10am
- Final Assessment: May 3, 2018, Thursday
Besides the 4-hour contact time for lecture and lab, students are expected to spend about 6 hours on average weekly on homework and on preparing the class.
CS2030 is a new module, required for all students in Bachelor of Computing (Computer Science) and Second Major in Computer Science students, cohort 17/18 onwards. In 2017, the Department of Computer Science reorganized the two module series on data structures and algorithms (CS1020, CS2010) into (CS2030, CS2040). CS2040 focuses on data structures and algorithms, while the advanced programming methodologies from CS1020 are moved into CS2030. CS2030 will also covers some basics OO design that previously were covered in CS2103, and introduces students to functional programming, concurrent programming, event-based programming, and other paradigms that are increasingly important.
After completing the module, students should:
- be confident in reading and developing medium-scale programs (up to 10K lines of code)
- be familiarize enough with common OO concepts to understand software code written in common OO language and understand documentation of software libraries in OO
- be able to apply OO concepts to design and implement medium to large scale programs, including
- design and implement a class
- decompose a problem solution into classes and define members and methods for each class
- use polymorphism effectively
- use inheritance to design simple class hierarchies that allow code reuse
- trace the control flow of a programs that use dynamic dispatch
- use encapsulation mechanisms such as interfaces, private methods/members
- be familiarize enough with common functional programming concepts and constructs, including lambda expression, effect-free programming, first class functions, infinite streams.
- be able to apply functional programming concepts to design and implement , including:
- Implement basic algorithms in functions that are effect free.
- Implement useful functions that take/return another function
- Write correct and effective code using lambda expressions and/or infinite streams
- be able to compare and contrast imperative programming, OO programming, and function programming paradigms, and select the most natural paradigms for each situation
- be aware of how the OOP and FP concepts are implemented in different ways in different programming languages
- be confident enough to learn new programming languages that uses OOP and FP paradigm
- attain proficiency in Java 8 (and above)
- be equipped with solid programming foundations for further studies in computer science
There is no textbook for this class.
There are many good books and online articles written about the topics covered in the module. These will be listed under the Readings section.