Difference between revisions of "Render Part D Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 6: Line 6:
  
 
=Background=
 
=Background=
[https://www.tutorialspoint.com/ruby/ruby_modules.htm Ruby Modules]
+
Investigate [https://www.tutorialspoint.com/ruby/ruby_modules.htm Ruby Modules], specifically the <code>module</code> and <include> keywords.
  
 
[[File:Warning_icon.svg|left|100px|caption]] Warning: Do '''NOT''' use the <code>include</code> keyword in Ruby as you would typically in C or C++.<br/>Be sure to include within the intended class or module definition.<br/>If you <code>include</code> at the top-level, it will mixin to <code>Object</code>!<br/>This may or may not rip a hole in the universe.
 
[[File:Warning_icon.svg|left|100px|caption]] Warning: Do '''NOT''' use the <code>include</code> keyword in Ruby as you would typically in C or C++.<br/>Be sure to include within the intended class or module definition.<br/>If you <code>include</code> at the top-level, it will mixin to <code>Object</code>!<br/>This may or may not rip a hole in the universe.

Revision as of 04:56, 8 December 2020

In this studio we will evolve our code from Render_Part_C_Assignment to leverage mixins.

Render part d class hierarchy.svg

Continue editing files in the render/assignment directory.

Background

Investigate Ruby Modules, specifically the module and <include> keywords.

caption

Warning: Do NOT use the include keyword in Ruby as you would typically in C or C++.
Be sure to include within the intended class or module definition.
If you include at the top-level, it will mixin to Object!
This may or may not rip a hole in the universe.

Code to Implement

Composite

file: src/main/ruby/render/assignment/composite.rb Ruby logo.svg
module: Composite
methods: initialize_components()
push_component(component)
each_component()

module Composite should define methods initialize_components, push_component, and each_component as well as mixin the Enumerable module.

initialize_components

push_component

push a component onto an array.

each_component

if a block is given, yield for each component. otherwise return a new Enumerator of the components.

Note: be sure to invoke to_enum with the symbol of the method :each_component and not invoke the method by mistake.

Enumerable

to add a number of useful methods, include the Enumerable module and use alias_method to alias an :each method to the :each_component method.

CompositeTransform

Mixin your Composite module to the CompositeTransform class and clean up existing code.

include Composite

Scene

Mixin your Composite module to the Scene class and clean up existing code.

include Composite

Testing Your Solution

Unit Test

file: src/test/ruby/render/part_d/part_d_unit_test.rb Ruby logo.svg UnitTest

note: ensure that you have removed all printing to receive credit for any assignment.