CSC/ECE 517 Fall 2011/ch2 2c ac

From Expertiza_Wiki
Revision as of 16:03, 17 September 2011 by Avalent (talk | contribs) (→‎Reference)
Jump to navigation Jump to search

Mixin versus Interface

Introduction

[To be changed] Functionality such as Comparable is done in Java with interfaces and in Ruby with mixins. Is there an advantage in using one or another? Consider other behaviors achieved with mixins in Ruby: Singleton, Enumerable, and DataMapper, for example. Could you accomplish these with interfaces in Java? Does this mean that mixins are more powerful? Or can interfaces achieve some purposes that mixins can't?

Concepts to explore

Definition

Multiple Inheritance

Multiple inheritance is a feature of some object-oriented computer programming languages in which a class can inherit behaviors and features from more than one superclass. (From Wikipedia, http://en.wikipedia.org/wiki/Multiple_inheritance)

Interfaces in Java

http://download.oracle.com/javase/tutorial/java/concepts/interface.html

Modules in Ruby

Modules in Ruby are a way to group together methods, classes and constants. They are similar to namespaces in languages such as C++. (From lecture 6 note)

Mixin using Modules

The most interesting use of modules is to define mixins. When you include a module within a class, all its functionality becomes available to the class. Not only can modules contain class methods; they can also contain instance methods. (From lecture 6 note)

Advantage and Disadvantage

Ruby mixins vs Java interfaces feature comparison
Features Ruby Mixins Java Interfaces
Add functionality/behavior to a class Yes. When a Ruby module gets mixed in a Ruby class, the class receives the implementation (behavior) of the methods defined in the module. No. A Java interface "is a group of related methods with empty bodies" (Java Interface). The class that implements the interface must provide the behavior for the inherited methods.
Favor composition over inheritance Yes. The class that includes a module establishes a "use" relationship with the module. This is composition. No. The class that implements an interface establishes a "is-a" relationship with the interface. This is inheritance.
The code of the mixin/interface interacts with the code of the class that includes/implements it Yes. A mixed-in module can implement methods in terms of the host's class methods. See the Enumerable example. No. An interface provides a set of method signatures that the host class must implement. An interface provides no implementation of methods.

Mixin

Mixin Advantage

Mixin Disadvantage

  • Page 82 of "Programming Ruby 1.9" textbook: a mixed-in module's instance variables can clash with the ones of the host class or with the ones of other mixins. There are programming practices to avoid this potential problem.

Interfact

Interface Advantage

Interface Disadvantage

Examples

Comparable

Ruby Implementation

Java Implementation

Singleton

Ruby Implementation

Java Implementation

public class Singleton  {
    private static final Singleton instance = new Singleton();
 
/**
Private constructor prevents instantiation from other classes
**/
    private Singleton() {
    }
 
    public static Singleton getInstance() {
        return instance;
    }
}

Enumerable

Ruby Implementation

Java Implementation

DataMapper

Ruby Implementation

Java Implementation

Unique Use Cases

Mixin Only Use Cases

Interface Only Use Cases

Reference

"Programming Ruby 1.9" textbook

Java Interface