CS 107 Introduction to Programming (Java) Fall 2014 Credits: 3 units Contact Hours: Section 1: Mon and Wed, 1400-1515, Room EBA-345 Section 2: Mon and Wed, 1600-1715, Room GMCS-301 Instructors: Ivan Bajic Office: GMCS 538 Email: ibajic@rohan.sdsu.edu Phone: 619-594-7253 Office Hours: Mon-Thurs 1515-1600, and by appointment *Course Materials 1. Required text: Beck, CS107 Course Reader: Cooperative Learning Exercises, SDSU, 2014. 2. Required text: Horstmann, Java for Everyone: Late Objects, Wiley, 2013. ISBN-13: 978-1-118-06331-6. 3. Optional text: Hahn, Harley Hahn's Guide to UNIX and Linux, McGraw-Hill, 2008. ISBN-13: 978-0-073-13361-4 . 4. CS107 lecture notes/slides (available on Blackboard) *Course Information for CS 107 Description from the Official Course Catalog Programming methodology and problem solving. Basic concepts of computer systems, algorithm design and development, data types, program structures. Extensive programming in Java. Prerequisites: Satisfaction of the Entry-Level Mathematics requirement. Course Type: Required course in the program *Specific Goals for CS 107 Course-Level Student Learning Outcomes * Configure a Java Development Kit and Integrated Development Environment for Java programming. * Produce clearly written code in an industry standard style appropriate for Java. * Define both primitive and compound data types and give examples in Java of each type. * Incorporate user-interaction input and output in a program through either console or graphical user interface methods. * Design, implement, test, and debug a program that uses each of the following fundamental programming constructs: string processing, numeric computation, simple I/O, arrays and the Java API. * Explain the basic control structures most programming languages employ. * Define, analyze and code the basic Java conditional and iterative control structures and explain how they can be nested. * Design, implement, test, and debug functions and methods that can be used in programs, and demonstrate the way parameters are passed in such functions and methods. * Create analytical algorithms that use arrays for solving simple problems. * Formulate algebraic expressions that describe mathematically the solutions to problems which are presented verbally. * Apply basic software engineering concepts. * Solve problems that have origins in a variety of disciplines including math, science, and the Internet. * Write Java programs using object-oriented design, and contrast the difference between object-oriented and procedural code. * Use object-oriented programming (OOP) concepts to design applications and computer programs. * Evaluate and analyze the concepts of OOP including inheritance and polymorphism. * Apply the principles of interface, inheritance and class hierarchy. * Design and implement classes that use inheritance. * Design and implement classes and interfaces that use polymorphism. *Relationship to CS Program Course Outcomes CS 107 addresses the following CS Program course outcomes (CS Program Student Outcomes): * a) An ability to apply knowledge of computing and mathematics * b) An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution * c) An ability to design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs * d) An ability to function effectively on teams to accomplish a common goal * f) An ability to communicate effectively with a range of audiences * h) Recognition of the need for and an ability to engage in continuing professional development * i) An ability to use current techniques, skills, and tools necessary for computing practice * j) An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices. * k) An ability to apply design and development principles in the construction of software systems of varying complexity. *Topics Covered The following topics are covered in CS 107: * The Software Development Environment: Java run-time environment, integrated development environments (IDEs), compiled vs. interpreted languages, obtaining and installing a Java IDE, compiler errors vs. run-time errors * Fundamentals of computer systems (hardware and software) and programming languages. * Introduction to the UNIX operating system: working with files, folders, text editors * Java, Java bytecode, Java Virtual Machine, interface (GUI vs. console), edit-compile-run * Java language elements, syntax, programming errors, debugging * Coding standards, conventions and styles: indentation options, names for variables and methods * Data types: primitive vs. compound types, numeric types, range and precision, char types, String types, logical types, array types, type compatibility, Java-defined classes as compound types * Variable expressions: numeric operators and expressions, String operators and expressions, logical operators and expressions, operator precedence * Basic input-output strategies: console I/O, formatting values for clean output * Control structures: conditional statements, loop statements, nesting levels in control statements * Arithmetic operators; relational operators; logical operators * Using a Java-defined API class * Methods (functions, procedures, subroutines) and functional programming: parameter passing, functional returns, variable scope, method overloading, modularity, implementation and testing strategies * Recursion * Arrays * Object-Oriented Programming using classes and methods * Creating and using a programmer-defined class * Classes and objects, building an example class, testing classes, static variables and methods, constructors, reference variables * Encapsulation of member data and member methods * Instance vs. static members and methods * Data privacy as supported by mutator, accessor, and constructor methods * Inheritance, class hierarchies, derived classes * Inheritance, constructors, public-private-protected-package, arrays of objects (intro to polymorphism) * Polymorphism, dynamic binding and polymorphic method invocation * Polymorphism, abstract classes, interfaces * Class inheritance: creating subclasses, overriding, class hierarchies, interface hierarchies *Course Schedule and Grading Policies Due Dates for Major Assignments and Exams Week Topic (Approx.) 1 Overview of computers and programming: computers, CPUs, machine language, assembly language, high/low-level languages, compilers, executables, Java compiler, Java interpreter, JVM, bytecode, Java as a cross-platform language 2 Introduction to the Unix operating system; introduction to vi and pico text editors HW1: 9/5 3 The programming process: editing, compiling, and interpreting Java programs 3 Java program structure: variables; type declarations; elementary input and output 4 Java program structure: operators; expressions; data type conversions 4 Control structures: conditional constructs; iterative constructs HW2: 9/19 5 Control structures: iterative constructs (continued) 5 Introduction to methods (functions and subroutines): static methods, returned values, scope of variables, parameters 1st Midterm, 9/24 6 Methods (continued) HW3: 10/3 7 Arrays 8, 9 Classes and objects: introduction to object-oriented programming HW4: 10/17 HW5: 10/24 10, 11 Classes and objects (continued) 2nd Midterm, 10/29 HW6: 11/7 12, 13 Classes and objects: inheritance and polymorphism HW7: 11/21 14, 15 Classes and objects (continued) HW8: 12/5 Final Exam: Sat., Dec. 13, 2014, from 1:00pm-3:00pm Scored activities and weighting by percentage of total score: Programming assignments (100 points, 8 at 12-13 points each, 20%) Readings Horst 1 Hahn 1–4, 22, 24–26 Horst 1 Horst 2 Horst 2 Horst 3; 4 Horst 4 Horst 5 Horst 5 Horst 6 Horst 8 Horst 8 Horst 9 Horst 9 First Midterm (100 points, 20%) Second Midterm (100 points, 20%) Final Exam (200 points, 40%) Grading Scale: A A– B+ B B– 95% and above 90% 87% 83% 80% C+ C C– D F 75% 70% 65% 55% below 55% *Other Course Policies Special Assistance: If you are a student with a disability and believe you will need accommodations for this class, it is your responsibility to contact Student Disability Services at (619) 594-6473. To avoid any delay in the receipt of your accommodations, you should contact Student Disability Services as soon as possible. Please note that accommodations are not retroactive, and that accommodations based upon disability cannot be provided until you have presented your instructor with an accommodation letter from Student Disability Services. Your cooperation is appreciated.