9/10/2014 Introduction Narrative Introduction Welcome to COP 3330, Object Oriented Programming. This is the second in a series of four courses: 1. COP 3014: Introduction to Programming with the C++ Language. Prerequisite: MAC 1140. 2. COP 3330: Object Oriented Programming. Prerequisite: CGS 3408 or a comparable course in C or C++ programming. Pre- or Corequisite: COP 3353. 3. COP 4530: Data Structures, Algorithms and Generic Programming. Prerequisites: COP 3330; MAD 2104 or 3107. Pre- or corequisite: CDA 3100. 4. COP 4531: Complexity and Analysis of Data Structures and Algorithms. Prerequisite: CDA 3101; COP 4530; MAD 3105 or 3107; STA 4442. Each of these courses is highly dependent on its predecessors in the sequence as well as the other stated pre- and co-requisites. Instructors This course is designed to serve both on-campus and distance students using web-based and other Internet-accessible components for all students. It is also designed to be taught by a team where the student body is sufficiently numerous or diverse. The team member roles are as follows: Instructor Duties Chris Lacher Lead Instructor Lecture Notes Exams Assignments Discussion Board Exam Assessment Course Management Tony Harris Associate Lead Instructor Live Lectures (on-campus & video) Discussion Board Assignment Assessment Danielle Anderson Course Mentor Discussion Board Assignment Assessment Subject Material This is a second course in programming, and the last one in the sequence that focusses primarily on programming. The coverage can be divided into three categories, as follows: Object Based Programming: Classes and Objects Namespaces http://www.cs.fsu.edu/~lacher/courses/COP3330/lectures/intro3330/script.html#Link2 1/6 9/10/2014 Introduction Narrative Overloading Templates Stream I/O File Processing Bitwise Data Object Oriented Programming: Inheritance Polymorphism Runtime Binding Data Structures: Stacks Queues Arrays Linked Lists All of these topics will be explored in depth in the context of the C++ programming language. Course Goals and Objectives At the end of this course, the student should be able to accomplish the following: Object Based Programming in C++ Write programs using the full engineering power of C++, including: classes and objects, encapsulation and information hiding, class inheritance, overloading of operators and functions, template classes and functions, bitwise programming, I/O using streams, and the use and management of external data files Create and manage multi-file projects using g++ and make Design and implement solutions to programming problems requiring up to five hundred lines of code and multiple source code files. Improve reliability, maintainability, and correctness of programs through software engineering principles and techniques including component re-use, coding style, and use of language features such as const, static, and namespace Object Oriented Programming Use inheritance, polymorphism, and runtime binding to solve certain programming problems Be able to judge the appropriateness of OOP techniques for specific programming problems Data Structures Define and use abstract data types stack and queue as algorithm control structures and data storage structures in C++ programs Implement stacks using an array data structure Implement stacks and queues using a linked list data structure In particular, this is the last course that will emphasize object oriented programming. Thus this course serves not only as fundamental background for courses in data structures, algorithms, and generic programming but also as an undercarriage to higher level software engineering courses that emphasize object oriented design and analysis. http://www.cs.fsu.edu/~lacher/courses/COP3330/lectures/intro3330/script.html#Link2 2/6 9/10/2014 Introduction Narrative Prerequisites This course assumes that you have a working knowledge of the basics of programming in C or C++. These basics will be reviewed very briefly, but in-depth coverage will be assumed to have taken place in CGS 3408 (or some equivalent previous course). This course also assumes that you have some experience using Unix and the programming environment supplied to you by our department. These basics will be reviewed briefly also. The details are left to the pre-/co-requisite COP 3502. To give you a feel of where you should be, here are some things that should be familiar concepts and that are central building blocks to this course: Programming concepts from C/C++ Expressions formed using C++ operators and precedence Branching using if, else if, else, and switch statements Looping using for, while, and do, statements Modularity using functions Data storage using structs, arrays and pointers Character strings I/O using keyboard/screen and re-direction Implementation skills Familiarity with Unix shells, files, and command line interface Edit files using Emacs or Vi Create a C/C++ program using Emacs Compile a C/C++ program using g++ Solve programming problems requiring up to 100 lines of code Bottom line: A thorough understanding of the material in Chapters 1-11 of [Gaddis] (or Chapters 113 of [Dale & Weems], or Chapters 1-8 of [Deitel]), commensurate programming experience, and rudimentary familiarity with the CS Unix environment will be assumed. Course Work Environment There is a common environment for remote access that the department supports for this course (and a number of other courses in the curriculum). That environment consists of the following components: SSH -- a full-featured, secure remote access utility A system of file- and compute-servers An Email utility elm Gnu emacs -- a text editor The Gnu compiler -- g++ The Unix make utility For a complete description of the system see: http://system.cs.fsu.edu/ For distance students and any others who plan to work remotely, be aware that unencrypted telnet access to departmental servers is not supported: only secure (encrypted) connections using SSH are supported. SSH, SecureCRT, or a similar system supporting ssh, is a required addition to your local workstation. See https://system.cs.fsu.edu/index.php/newusers for the latest information on support of SSH and how to get software. http://www.cs.fsu.edu/~lacher/courses/COP3330/lectures/intro3330/script.html#Link2 3/6 9/10/2014 Introduction Narrative Once you have an ssh client installed, you should begin to familiarize yourself with the electronic environment in the cs.fsu.edu domain. You are entitled to a login account which is essential to participation in this course. New students should see the information at https://system.cs.fsu.edu/index.php/newusers to get started. Work Rules 1. Do your own work. This means: 1. Do not copy any code from any source (electronic or printed) other than official course sources such as lecture slides, lecture scripts, and official code distributions. 2. Do not read any code from other students, and do not provide help for any other student in the class; this means you should neither send nor receive Email containing code with anyone other than course instructors. 3. You may not read code off another person's computer screen. 4. Do not seek help from anyone other than the instructors, and do not give help to anyone else in the class. 2. Get help from your instructors, in class or in the designated discussion forum. This means: 1. Discussion Board. The preferred method of seeking help is the class discussion board. The forums and topical threads therein provide a historical record of all questions, answers, and explanations. These are extremely useful to all students and can be accessed 24/7. Email may be used, but is appropriate only when code must be quoted or a private matter is concerned. For all other issues, the discussion board should be the primary interactive resource and archive. 2. Email. To discuss personal matters or code (which should not be posted publicly), seek help from your instructors, in person or via Email. Always bring an up-to-date printout of your source code when seeking help in person. When using Email, put the code you want to discuss in the body of your Email and embed questions inside the code beginning with // Q: (insert question here) Remember, this is appropriate in Email to instructor(s) but not in a discussion forum (see below). 3. It is perfectly OK to bring up anything in class (lecture, recitation, or discussion board), and it is encouraged that you participate in these discussions. You may use any material or information said, written, or handed out in class. 4. You may not put more than two (2) lines of code in any public message (i.e., discussion forum or chat room). No code that is a solution to an assignment should be posted publicly. 3. Keep your files organized 1. Create a directory "cop3330" and do all work for this class inside that directory. Make sure this directory has permission code 700. (In the parent directory of cop3330, enter the command "chmod 700 cop3330".) 2. Create a separate subdirectory, and work within that subdirectory, for each class project or homework assignment. 3. When you have source code, we advise not keeping the object code or executable. This will save your disk space allocation. (An instance where time is cheaper than space.) How to Work Weekly Time Budget http://www.cs.fsu.edu/~lacher/courses/COP3330/lectures/intro3330/script.html#Link2 4/6 9/10/2014 Introduction Narrative Study new material Lecture material (slides, script, exercises, discussion forum) Resource distributions (cpp, tcpp, tests, examples) Assignments Review previously covered material Do current homework Work on current project Approach to a Project Analyze Understand the assignment in general terms Understand each detailed requirement Required deliverables Design Classes Functions Function main() Makefile Code Classes Stub each method Debug class Expand and debug one method at a time Functions Start with simple body Replace with actual body Assignment Submission Process Assignments account for a large portion of the grade for this course, and probably for an even larger portion of learning. To get credit for your hard work, it is important to adhere to our assignment submission standards. Each assignment is due before midnight (i.e., on or before 11:59:59 PM) on the due date. There is no room for individual flexibility on assignment (or homework) deadlines, because code releases for the class are timed to the assignment deadlines. Allowing an individual to turn in a assignment late would result in either giving that individual access to solutions, or delaying code distributions for the entire class. Neither option is viable, because we cannot extend the ultimate deadline -- the end of the semester. Early submission of assignments is acceptable, however, we cannot give early substantive feedback, assignments submitted early will be assessed together with all other submissions. In order to maintain uniformity, we will adhere to the time on shell.cs.fsu.edu. To check the time on shell: Log on to shell.cs.fsu.edu Type date at the command prompt. All directories and files submitted should be named in accordance with the specifications listed in the assignment document. All filenames should be in lowercase unless otherwise specified. A makefile is required for most assignments. To submit assignment X: http://www.cs.fsu.edu/~lacher/courses/COP3330/lectures/intro3330/script.html#Link2 5/6 9/10/2014 Introduction Narrative 1. Log in to your CS account on shell.cs.fsu.edu. (Warning: The submission script will not work on other machines.) 2. Copy the appropriate script file into your directory created for the assignment. The name and exact location of this file will be specified in the assignment document. We will use "xyzsubmit.sh" in this example. 3. Change the permissions on the script file to rwx------; this is accomplished by entering the command "chmod 700 xyzsubmit.sh" in the assignment directory. 4. Run the script by typing its name. This should result in an Email message to one "cop3330" containing a tarred version of your assignment files. Look for the "elm" command indicating the script successfully sent the Email. 5. You should receive two connfirming Email messages from the softbot responsible for receiving, unpacking, and storing your assignments. The first indicates receipt of the submission, the second contains a copy of exactly what was stored in your portfolio from the submission. 6. Be sure to check your Email for a confirmation that your assignment submission was received. Save this Email. It is your time-stamped proof of submission in the unlikely event that your assignment gets lost. 7. Also check for the second Email containing the received contents of your submission. Look at this content to be sure that what was received is what you intended to submit. 8. If you do not receive both confirmation Emails within a few minutes of submission, contact the instruction staff for further advice. Re-submit only if the elm send command is not issued. Course Tour The Course Syllabus is the primary source for course policies, including the following: Exam Schedule Grading Policy Contact The Instructors Prerequisite Courses Other Course Policies Course Syllabus The Course Organizer is a central access point for all "outgoing" course content. Part of the organizer is the Course Calendar. Lecture notes and assignments are released through the organizer/calendar. Course Organizer Course Calendar Most course communication is handled through the Blackboard course site. Blackboard Portal http://www.cs.fsu.edu/~lacher/courses/COP3330/lectures/intro3330/script.html#Link2 6/6