CSC/ECE 517 Fall 2011/ch2 2c ac

From Expertiza_Wiki
Revision as of 13:43, 17 September 2011 by Avalent (talk | contribs) (→‎Introduction)
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

Mixin

Mixin Advantage

Mixin Disadvantage

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