CSC 216 - Software Development Fundamentals
Catalog Description:The second course in computing, intended for majors and minors. Emphasis is on exploring encapsulation; polymorphism; composition; inheritance; finite state machines; linear data structures [including array lists, linked lists, stacks, queues, and the tradeoffs in implementation]; and recursion [including recursive linked lists] in the context of the software development lifecycle including the processes and practices for designing, implementing, and testing high quality software.
Contact Hours:
- Lecture: 3 hours
Co-requisites: CSC 217
Restrictions: None
Coordinator: Dr. Sarah Heckman
Textbook: ZyBooks for CSC 216, ZyBooks, 2021
Course Outcomes:
- Describe the utility of inheritance, abstract classes, interfaces, and polymorphism in object-oriented systems, and design, implement, and test programs which use these language features;
- Identify the phases of a simple model of the software life cycle, and employ these phases in developing software;
- Describe basic design modeling techniques, including UML class diagrams and simple design patterns (e.g., model/view/controller), and indicate how and when to use them;
- Identify and compare the basic kinds of software testing, describe when to use each method, and design and implement test code;
- Navigate and extract information from the Java API, and employ the Javadoc tool to construct internal documentation of source code;
- Use software engineering best practices like pair programming, test-driven development, code coverage, static analysis, version control, continuous integration, and documentation with supporting tooling to design, implement, and test object-oriented systems.
- Design, implement, and test a finite state machine;
- Identify when recursion is useful, and design, implement, and test recursive algorithms and simple recursive data structures;
- Implement, test, and use a stack, queue, array-based list, and linked list.
Topics:
- Composition
- Software Testing & the Debugger
- Software Engineering Best Practices - Static Analysis, Code Coverage, Version Control
- Using Java Collections
- Inheritance and Polymorphism
- Abstract Classes and Interfaces
- Exceptions and Libraries
- Design and Patterns
- Software Lifecycle and Task Planning
- Finite State Machines
- State Pattern and Inner Classes
- Array Lists Implementation
- Generic Array Lists Implementation
- List Nodes
- Generic Linked Lists Implementation
- Complexity
- Stacks and Queues
- Iterators
- Recursion
- Recursive Lists Implementation
- GUI Views
- GUI Controllers
- Searching and Binary Search Trees
- Sorting
See Course Listings