Object-Oriented Programming
    CSCI-UA.0470-001
    NYU, Undergraduate Division, Computer Science Course - Fall 2013
  
 
  
    
      
    OOP Class Notes for 9/12/13
Object Oriented Programming Design
- How do we get started?
- Knowing what to design: translator from Java source code to C++ source code 
- Need/have: have an expert on the subject or domain of interest  
 
- CRC cards and UML diagrams
- Training wheels for OOP design 
- Our textbook covers this in a few pages. Note: Wikipedia also covers it but mostly in minor detail
 
- Mentality of what we need to get started
- Simple start: Input and Output 
- In our case, we input Java source code "a program" and get C++ source code as an output
- How do we know that the translator is working? Behavior of the
  resulting C++ code is the same as Java source code. As an added
  note, the input is assumed to be perfectly complete and correct
  (i.e. compiles with javac)
- Testing strategies: 
  
    - Write Java programs that are test inputs and
      use translator. 
    
- Compile and run C++ output; then compare (needs a debugger). 
    
 
- How to store the source code: data representation 
  - Trees: 
    
      - Abstract syntax tree: what is important for the actual
        translation are the syntactic constructs of the language not
        how they are represented in the source code.
- Concrete syntax tree (aka parse tree): tree that represents the actual source code.
 
 
- 1st phase: Read in "parse"
- xtc will handle the parsing
 
- Next phase: Analyze
- In analyzing code: take note of dependencies, read them in, and translate the dependencies
- Code should iterate between analyze and parse.
 
- Next phase: translation scheme
- Next phase: Pretty print C++ Code.
- The purpose of pretty printing C++ code is so that we don't shoot ourselves in the foot when we look at the output
- Important note: Mistakes can be made in translator or debugger. Thus the best way to check is to look at the C++ source code.
- Time spent on pretty printing is well worth it.
 
- Checking your code:
- Problem: hand written and computer generated code: spacing might be different. If translation scheme changes, things might be tricky and different. 
 
- More in Depth on Trees
- AST: statically typed tree
- You can have all phases in one class but that only works with a
  statically typed tree
- In one class: + everything together per data kind + easier to add a new data kind
- Data kinds are fixed in this case but there will be more phases that will be changed from midterm to final
- AST: figure out one way to map to the other is the general translation
 
- Alternative: dynamically typed tree - Trade off: safety for flexibility
- Class per phase: + everything together per phase + easier to add a new phase
 
- Xtc supports both of these trees
 
 
- What is being asked of you?
- How do we implement these programming phases?
- Generalizing and details will be left to you; mapping and other stuff will be covered in class
- May have to find right balance between safety and flexibility
- Additional requirements after midterm. Class per phase is PATH OF LEAST RESISTANCE.
Notes on xtc
- xtc will not tell you if you have malfunctioning Java code (use
  javac to check whether your test inputs compile)
- xtc does not have pretty printing in C++
- xtc does not support multithreading
- xtc supports class per phase and class per data kind
- Next class will explain more about xtc.