Thursday, June 01, 2006

Abstract calsses vs Interfaces

first, let's look at when to use normal class definitions and when to use interfaces. Then I'll tackle abstract classes.

Class vs. interface
Some say you should define all classes in terms of interfaces, but I think recommendation seems a bit extreme. I use interfaces when I see that something in my design will change frequently.

For example, the Strategy pattern lets you swap new algorithms and processes into your program without altering the objects that use them. A media player might know how to play CDs, MP3s, and wav files. Of course, you don't want to hardcode those playback algorithms into the player; that will make it difficult to add a new format like AVI. Furthermore, your code will be littered with useless case statements. And to add insult to injury, you will need to update those case statements each time you add a new algorithm. All in all, this is not a very object-oriented way to program.

With the Strategy pattern, you can simply encapsulate the algorithm behind an object. If you do that, you can provide new media plug-ins at any time. Let's call the plug-in class MediaStrategy. That object would have one method: playStream(Stream s). So to add a new algorithm, we simply extend our algorithm class. Now, when the program encounters the new media type, it simply delegates the playing of the stream to our media strategy. Of course, you'll need some plumbing to properly instantiate the algorithm strategies you will need.

This is an excellent place to use an interface. We've used the Strategy pattern, which clearly indicates a place in the design that will change. Thus, you should define the strategy as an interface. You should generally favor interfaces over inheritance when you want an object to have a certain type; in this case, MediaStrategy. Relying on inheritance for type identity is dangerous; it locks you into a particular inheritance hierarchy. Java doesn't allow multiple inheritance, so you can't extend something that gives you a useful implementation or more type identity.

Interface vs. abstract class
Choosing interfaces and abstract classes is not an either/or proposition. If you need to change your design, make it an interface. However, you may have abstract classes that provide some default behavior. Abstract classes are excellent candidates inside of application frameworks.

Abstract classes let you define some behaviors; they force your subclasses to provide others. For example, if you have an application framework, an abstract class may provide default services such as event and message handling. Those services allow your application to plug in to your application framework. However, there is some application-specific functionality that only your application can perform. Such functionality might include startup and shutdown tasks, which are often application-dependent. So instead of trying to define that behavior itself, the abstract base class can declare abstract shutdown and startup methods. The base class knows that it needs those methods, but an abstract class lets your class admit that it doesn't know how to perform those actions; it only knows that it must initiate the actions. When it is time to start up, the abstract class can call the startup method. When the base class calls this method, Java calls the method defined by the child class.

Many developers forget that a class that defines an abstract method can call that method as well. Abstract classes are an excellent way to create planned inheritance hierarchies. They're also a good choice for nonleaf classes in class hierarchies.

out and ref parameter in C#

The out and the ref parameters are used to return values in the same variables, that you pass an an argument of a method. These both parameters are very useful when your method needs to return more than one values.

In this article, I will explain how do you use these parameters in your C# applications.

The out Parameter

The out parameter can be used to return the values in the same variable passed as a parameter of the method. Any changes made to the parameter will be reflected in the variable.

public class mathClass
{
public static int TestOut(out int iVal1, out int iVal2)
{
iVal1 = 10;
iVal2 = 20;
return 0;
}

public static void Main()
{
int i, j; // variable need not be initialized
Console.WriteLine(TestOut(out i, out j));
Console.WriteLine(i);
Console.WriteLine(j);
}
}




The ref parameter

The ref keyword on a method parameter causes a method to refer to the same variable that was passed as an input parameter for the same method. If you do any changes to the variable, they will be reflected in the variable.

You can even use ref for more than one method parameters.

namespace TestRefP
{
using System;
public class myClass
{

public static void RefTest(ref int iVal1 )
{
iVal1 += 2;

}
public static void Main()
{
int i; // variable need to be initialized
i = 3;

RefTest(ref i );
Console.WriteLine(i);

}
}
}

Wednesday, March 08, 2006

setting Output Cache for updated data from DB (.NET)

Modal dialogs not under the master page cache browser contents. So even if the DB has updated values, the dialog still opens with the old data for the existing session.

Please include this tag on all aspx modal dialog popups <%@ OutputCache Location="None" VaryByParam="None" %>

Tuesday, December 20, 2005

Thursday, December 08, 2005

Testing a ASP.NET webservice

http://www.oreilly.com/catalog/prognetws/chapter/ch02.html

Authentication in ASP.NET

http://www.c-sharpcorner.com/Code/2003/Sept/AuthenticationAndAuthorization.asp

Functionality of the key files in .net application

AssemblyInfo.cs
An information file that provides the compiler with metadata (name, version, etc.) about the assemblies in the project.

Global.asax
Customizable to handle application-level events (e.g., Application_OnStart).

HelloWorldService.vsdisco (HelloWorldService is the name of a webservice)
An XML file used for dynamic discovery of web services.

Web.config
An XML file containing configuration information for the application.

Simple C# Tutorials for beginners

http://csharpcomputing.com/Tutorials/TOC.htm

Welcome to my exclusive Technology resources sharing blog

Welcome. I created this technoshare blog specifically to share some very good technological and software related resources that I have/might come across.

I am starting it as a reference for me and others who might be looking for information regarding various technologies and who are preparing for technical interviews.

I suggest you to also visit my technical collection page in my website www.rajeshvuta.com for other resources.

Hope you would find this resource useful. In case you want to have a word with me,catch me at rajeshvuta [@] yahoo.com


Good luck yo Techno Whizs

Rajesh Naidu Vuta