Showing posts with label OOPS. Show all posts
Showing posts with label OOPS. Show all posts

Friday, February 5, 2010

abstraction and encapsulation

abstraction

abstraction is a process. It manages complexity of objects. Abstraction identifies critical behavior of objects and eliminates the tedious details.

Example: i need to create a payroll software and software should have details of all employees within company. Employees behaviors will differ from one another. Different employees will have different hobbies, different size and shape, etc. All these behaviors are not required for creating payroll software. So we should follow a process for identifying crucial behaviors of the object. In case of payroll system, employee object should have employee id, name, band and department. All other behaviors can be eliminated. This process is called abstraction.


encapsulation

encapsulation is the mechanism by which abstraction can be implemented. Storing data and function in a single unit(class) is encapsulation. data's cannot be accessible from the outside world. function within classes can access these data. This is often referred as Information hiding.


Example: Consider a Math class. It has Add method and other member variables. Add method is exposed to the outside world. But outside world will not be knowing what is happening inside Add method. This is called information hiding.


reference:

http://oreilly.com/catalog/objectvbnet/chapter/ch01.pdf

Wednesday, November 18, 2009

Interface vs Abstract class

  1. When to go with Interfaces and how when to go with Abstract class?
  2. Can Interface contain properties?
  3. Can we do Interface1:Interface2?
  4. If yes, How does it implement in a class?
  5. Can an abstract class implement an Interface?

http://www.codeproject.com/KB/cs/abstractsvsinterfaces.aspx


FeatureInterfaceAbstract class
Multiple inheritanceA class may inherit several interfaces.A class may inherit only one abstract class.
Default implementationAn interface cannot provide any code, just the signature.An abstract class can provide complete, default code and/or just the details that have to be overridden.
Access ModfiersAn interface cannot have access modifiers for the subs, functions, properties etc everything is assumed as publicAn abstract class can contain access modifiers for the subs, functions, properties
Core VS PeripheralInterfaces are used to define the peripheral abilities of a class. In other words both Human and Vehicle can inherit from a IMovable interface.An abstract class defines the core identity of a class and there it is used for objects of the same type.
HomogeneityIf various implementations only share method signatures then it is better to use Interfaces.If various implementations are of the same kind and use common behaviour or status then abstract class is better to use.
SpeedRequires more time to find the actual method in the corresponding classes.Fast
Adding functionality (Versioning)If we add a new method to an Interface then we have to track down all the implementations of the interface and define implementation for the new method.If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly.
Fields and ConstantsNo fields can be defined in interfacesAn abstract class can have fields and constrants defined



    Tuesday, November 17, 2009

    Runtime polymorphism vs Compile time polymorphism

     Polymorphism can be achieved in 3 ways:

    1. Method overloading     (compile time polymorphism
    2. Method overriding through inheritance (runtime polymorphism)
    3. Method overriding through C# interface (runtime polymorphism)
    Runtime polymorphism means, compiler would come to know which method to execute, at runtime not compile time. We can implement the runtime polymorphism by using override keyword.

    Late binding
    • The decision as to which version of method to invoke cannot be made at compile time.
    • It has to be done at run-time.
    • This is reffered as late binding


    Reference:

    http://www.dickbaldwin.com/csharp/Cs000120.htm


    Difference between compile time & run time polymorphism:

    • override functions have same signatures, but implemented in different classes
    • overload is function with same name but different signatures in same class