FURTHER PROGRAMMING PARADIGMS - 2020/1
Module code: COM2040
Module Overview
This module will introduce fundamental concepts of three different programming paradigms and provide a foundation for the theoretical and practical aspects of building programs using these paradigms. Object Orientated Design and Programming is first introduced as a popular methodology for large application development. The module will then cover two alternative programming paradigms, Functional Programming and Logic Programming, with a focus on both their theoretical underpinnings and computation models and the practical aspects of implementing algorithms and larger applications in those paradigms.
Module provider
Computer Science
Module Leader
KRAUSE Paul (Computer Sci)
Number of Credits: 15
ECTS Credits: 7.5
Framework: FHEQ Level 5
Module cap (Maximum number of students): 250
Overall student workload
Independent Learning Hours: 104
Lecture Hours: 24
Laboratory Hours: 22
Module Availability
Semester 1
Prerequisites / Co-requisites
None. Expected prior learning: A good working knowledge of programming using a procedural or object-oriented language. An understanding of basic mathematical concepts of set theory and first-order logic, equivalent to that delivered in COM1027.
Module content
The module will be delivered in three sections, each covering a programming paradigm with both theoretical and practical aspects introduced. Indicative content for each will be drawn from the following.
Object Oriented Programming (4 weeks)
- Introduction to Object-Oriented design - The case for object-oriented design. Abstraction, encapsulation, modularity, reuse of software.
- The C++ Class - Basics of the C++ class, constructors, destructors, memory allocation, operator overloading, friend operators
- Inheritance - Inheritance, polymorphism, public/private/protected, member functions/variables, casting, virtual and abstract.
- Useful data structures such as lists and arrays.
Functional Programming (3.5 weeks)
- Introduction to functional programming through a functional language: values, functions as values, expressions, evaluation, evaluation strategies
- Simply typed lambda calculus: types and type-checking, inductive datatypes and structural induction, pattern-matching
- Peano arithmetic
- Polymorphic lambda calculus: polymorphism, type classes, polymorphic datatypes
- Lists, list comprehensions
- Complex data structures: trees, structured trees, graphs
- Side-effects vs pure computation: Input output, state, …
- Advanced topics in functional programming: type inference, proofs as programs, map/reduce and applications to Big Data, …
Logic Programming (3.5 weeks)
- Introduction to logic programming through a declarative language such as Prolog: facts, rules and queries.
- Predicate Logic and logic programming.
- Interpreting declarative programs: pattern matching, constraints and backtracking using cut and negation.
- Data structures in logic programming, including lists.
- Recursion in logic programming to solve common problems such as searching and sorting a list.
- Advanced topics in logic programming: unification, proof search as programs, ..
Week 12: Revision week
Assessment pattern
Assessment type | Unit of assessment | Weighting |
---|---|---|
Coursework | Individual Programming Assignment | 40 |
Examination | Written Exam | 60 |
Alternative Assessment
N/A
Assessment Strategy
The assessment strategy for this module is designed to provide students with the opportunity to demonstrate both theoretical knowledge and practical expertise in the design and implementation of Object Oriented, Functional, and Logic algorithms. The written examination will assess knowledge and the assimilation of terminology, concepts, syntax and features the different programming paradigms. The programming assignment will assess the ability of students to design and implement these skills in a practical setting. Thus, the summative assessment for this module consists of the following.
* Examination: 2-hour, closed-book written examination (60%) Addressing LO1 through to LO7
* Individual Programming Assignment: to be completed during the semester over a period of 6 weeks (40%). The assignment will be set in week 4 due Tuesday Week 11. Addressing LO4 and LO7
Any submission deadline given here is indicative. For confirmation of exact date and time, please check the Departmental assessment calendar issued to you. Formative assessment and feedback For the module, students will receive formative assessment/feedback in the following ways.
* During lectures, by question and answer sessions and using technologies such as poll everywhere
* Online discussion forums will be used for the course
* During supervised computer laboratory sessions
* Via assessed coursework
* Via discussion in lectures about suitable design solutions for the assignment.
Module aims
- Familiarise students with object-oriented methodology, software design and implementation.
- Introduce Functional Programming and Logic Programming as alternative programming methodologies, and their theoretical underpinnings.
- Provide students with the knowledge required to implement algorithms and programs using Object Oriented, functional and logic programming methodologies.
Learning outcomes
Attributes Developed | Ref | ||
---|---|---|---|
001 | Describe the fundamental principles of Object Orientated design | KCT | LO1 |
002 | Describe the fundamental principles of Functional Programming | KCT | LO2 |
003 | Describe the fundamental principles of Logic Programming | KCT | LO3 |
004 | Apply knowledge of each paradigm to design and implement Object Oriented, Functional and Logic programs | KPT | LO4 |
005 | Explain the relationship between Lambda Calculus and Functional Programming | KCP | LO5 |
006 | Explain the relationship between Predicate Logic and Logic Programming | KCP | LO6 |
007 | Analyse and critically compare the programming paradigms with respect to specific programming problems | KCP | LO7 |
Attributes Developed
C - Cognitive/analytical
K - Subject knowledge
T - Transferable skills
P - Professional/Practical skills
Methods of Teaching / Learning
The learning and teaching strategy is as follows. There will 2 hours of lectures per week, with an associated 2 hours of computer-laboratory-based material that will closely follow the lectured material. The purpose of the programming laboratories is for students to gain first-hand experience in applying the concepts taught in lectures.
Learning and teaching methods include the following.
Lectures: 12 weeks at 2 hours per week.
Programming Laboratories: 11 weeks at 2 hours per week.
Indicated Lecture Hours (which may also include seminars, tutorials, workshops and other contact time) are approximate and may include in-class tests where one or more of these are an assessment on the module. In-class tests are scheduled/organised separately to taught content and will be published on to student personal timetables, where they apply to taken modules, as soon as they are finalised by central administration. This will usually be after the initial publication of the teaching timetable for the relevant semester.
Reading list
https://readinglists.surrey.ac.uk
Upon accessing the reading list, please search for the module using the module code: COM2040
Other information
This module has a capped number and may not be available to ERASMUS and other international exchange students. Please check with the International Engagement Office email: ieo.incoming@surrey.ac.uk
Reading list
Required Purchase
N/A
Essential Reading
N/A
Recommended Reading
Object-Oriented Programming Using C++ (Introduction to Programming), Joyce Farrell, 2008, South Western College, ISBN-10: 1423902572, ISBN-13: 978-1423902577.
Haskell: The Craft of Functional Programming (International Computer Science Series), Simon Thompson, 2011, Addison Wesley; 3 edition ISBN-10: 0201882957, ISBN-13: 978-0201882957
Logic Programming with Prolog, Max Bramer, 2005, Springer-Verlag London, ISBN 978-1-84628-212-6, DOI 10.1007/1-84628-212-8.
Background Reading
A range of online web resources will be provided.
Programmes this module appears in
Programme | Semester | Classification | Qualifying conditions |
---|---|---|---|
Computer Science BSc (Hons) | 1 | Compulsory | A weighted aggregate mark of 40% is required to pass the module |
Computing and Information Technology BSc (Hons) | 1 | Compulsory | A weighted aggregate mark of 40% is required to pass the module |
Please note that the information detailed within this record is accurate at the time of publishing and may be subject to change. This record contains information for the most up to date version of the programme / module for the 2020/1 academic year.