680 likes | 697 Views
This text discusses recent course improvements in CS200, including increased emphasis on reading Java and incremental development and testing. It also introduces UML diagrams - use case, class, object, and activity diagrams - and provides examples and references for each.
E N D
CS 200 Additional Topics and Review Jim Williams, PhD
Week 14 • Piazza: New CS Declaration Req. @1142 • BP2 • Team Lab: Object-Oriented Space Game • TA Evaluation • Hours Last Week & CS 300 • Course Evaluation (emailed link) • Lecture: UML, Additional Topics
Recent Course Improvements Redesign of Intro Course (CS302 -> CS200)Study CycleProblem Solving Tips Team Labs as study groups • emphasize reading Java, unexpected behavior Projects • emphasize incremental development & testing Increased assistants and office hours
Changes Possible • Computer Science is influencing every field, including education. • This potential seems exciting but not clear in what ways education will be positively influenced.
Course Survey • Lecture, Homework, Projects, Materials, Feedback • Instructor: Overall, Responsiveness, Environment • Recommend Course • Growth Questions (e.g., bring laptop to Team Lab). What would you expect in order to rate course in the top rating (7) of each category?Or why didn't you give a top rating? Please! describe in the open ended notes.
Lots of Jobs if you understand Programming Software Developer/Programmer/Software Engineer Testing/Quality Assurance Technical Support Technical Writing Business/Systems Analyst Software Architect Product Manager Project Manager Development Manager Technical Sales Marketing
Analysis and Design Analysis: Describing the Problem Design: Describing a Solution
UML Diagrams UML (Unified Modeling Language) • Many diagrams with lots of details Goal in CS 200 is to recognize: • Use Case Diagram • Class Diagram • Object Diagram • Activity Diagram/Control Flow
UML Diagrams: References Examples of Diagrams: https://www.uml-diagrams.org/ Simple Drawing Tool: http://www.umlet.com/umletino/umletino.html
Use Case • Behavior diagram • How external users (actors) interact with the system. https://www.uml-diagrams.org/use-case-diagrams.html
Class Diagram Shows structure of a system with features, constraints and relationships. Independent of time. https://www.uml-diagrams.org/class-diagrams-overview.html
Object Diagram • A snapshot of a system at a point in time. • Instances of classes with specific attribute values. https://www.uml-diagrams.org/class-diagrams-overview.html
Activity Diagram (Control Flow) • Behavior diagram • Shows flow of control emphasizing sequence and conditions https://www.uml-diagrams.org/activity-diagrams.html
Problem With a command line program show the files in all subfolders of a folder.
Recursive Algorithm • Repeated applications of an algorithm on smaller versions of the same problem. • Eventually reach a base case which is simply solved.
Recursion Example public class Show { public static void show(File file, String depth) { System.out.printf("%s%s\n", depth, file.getName()); if ( file.isDirectory()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { show(files[i], depth + " "); } } } public static void main(String[] args) { File file = new File("."); show(file, " "); } }
Recall Fibonacci Sequence 1 1 2 3 5 8 13 21 … First 2: 1, 1 (base case) Others: sum of previous 2 (recursive step) Example: If we want to find the 5th number: 5th = 4th + 3rd https://en.wikipedia.org/wiki/Fibonacci_number
Recursive Solution Base case: • Can be simply solved Recursive step: • Break into smaller problems
Iteration vs Recursion • Each may be better (simpler, clearer, more efficient) for a problem. • Some problems, such as navigating trees, recursion is frequently a helpful and elegant solution.
Course Review Key Principles, Tools, Diagrams, Data Types, Operators, Keywords, Control Flow, Programming Paradigms, Debugging Techniques, File Input/Output, Commenting & Style, Unit Testing, Memory, Best Practices, Learning Programming
Key Principles Algorithms Abstraction
Tools zyBooks, JavaVisualizer, DiffChecker, Command Prompt, notepad, javac, java, Eclipse IDE (editor, compiler, vm, debugger)
Diagrams truth tables, memory model diagrams, control flow charts (activity diagrams), class diagrams, object diagrams, and use-case diagrams.
Data Types Primitive & Reference Primitive: 8 Reference: existing, classes you write.
Evaluating Java Expressions Precedence Associativity Sub-expressions left-to-right
Control Flow Sequence Methods Conditionals Loops
Data Structures Arrays: single and multi-dimensional ArrayLists ArrayLists of Arrays
Development Process Edit-Compile-Run cycle Analysis - understand the problem Design - pseudocode
Best Practices • Incremental, systematic, frequent deliverables • Test frequently • Test bench with testing methods • Add additional tests as requirements are determined or bugs are found.
Debugging Techniques • Stepping through code • Java Visualizer • Eclipse debugger • Problem decomposition • Print statements, debugger • Tips
Programming Paradigms Structured Programming Object-Oriented Programming (brief)
Applied Study Cycle • frequent, varied interactions with material
zyBooks Participation Activities Assigned readings with small activities due before lecture
Lecture - Activities • Definitions & Explanations • Drawing Diagrams • Demonstration • Stories • Retrieval Practice • Questions, including TopHat
zyBooks Challenge Activities Application of previous week's material to small programs.
Team Lab • Weekly paired and small group study with mentor nearby. • Required interaction with mentor on key topics. • Variety of activities to learn Terms, Read, Write, Test & Debug code.
Weekly Programs • Application of programming concepts to design algorithms and write code to solve problems. • Small programs early, large programs with milestones later. • Incrementally developing skills on larger and more complex programs.
Exams Assess careful reading and tracing skills.
Memory areas static: holds static variables when class is loaded into memory. heap: where instances/objects are allocated stack: where local variables and parameters are allocated each time a method is called.
Memory public class M { int varName = 1; static int cVar = 2; public M(int varName ) { this.varName = varName; } public static void main(String []args) { M[] varName = new M[3]; varName[0] = new M(3); varName[1] = new M(4); } }