4/23/2017

Programming language categorization

 

mostly all programming language can be defined in two category.

Compiled (Programming)

Interpreted.(Scripted)

Programming (Compiled)

Language like C , C++ etc comes in compiled category while JavaScript ,Lua etc comes in Scripting Category.

Compiled Language has below generic steps for programming

1.Write Code.

2.Compile it with Compiler( Like VisualStudio on Windows for C++ , gcc on linux for C++)

3.Link all the object file.

4.Create executable

5.Run on desired system(Supporting library should be present there )

One the executable is created , after that nothing can be done .User can run it and based on the type of application(UI/non UI) only input can be given.OS takes control of running of the program.

Scripting (Interpreted) : JavaScript,Lua

These are simpler scripts , which runs normally in browser or other Interpreter based environment like JavaScript .Here the interesting thing is that browser is it self written in C++.

These are normal steps in Scripting Language

1.Write Script Code.

2.Compile it with Compiler( Like VisualStudio on Windows for C++ , gcc on linux for C++)

3.Link all the object file.

4.Create executable

5.Run on desired system(Browser or other environment  )

Scripting language has limited feature and very less access of system internals while Programming language has a greater control over system

Scripting language execute line by line ( like a interpreter Convert the speech from one language to another in real time –> English to hindi )

While Programing language are pre translated in Machine code (There is no interpreter and speech is already converted and printed in native language of user)

Programming language are fast.

MARKUP Language : (HTML,XML)

Special syntax , to display the format of data like display the name of user as Table or Bullet , it is presentation of data

XML widely used in creating GUI of Android application.

Java: has a special category which is partially compiled and partially interpreted  .Will be covered later in detail.

Virtual desctructor

We  have two classes

class A{

public :

A(){  cout<<”Base constructor of class A “;

~A(){  cout<<”Base destructor of class A “;

};

Class B : public A{

public :

B(){ cout<<”Derived constructor of class B” ;}

~B(){  cout<<”Derived desstructor of class B“};

};

 

Now in main , we have different way to create object;

int main(){

// Case 1 –> Object Creation

//Proper constructor and destructor will be called , nothing need to be done

A objA;

B objB ;

//Case 2—> Pointer with same class dynamic object

A *pA = new A;

B *pB = new B;

….

…..

delete pA ;delete pB; // no issue ,work properly and destructor of A & B class will be called

//Case 3 –> Base class pointer , derived class memory

//in such case , proper destructor will not be called

A *pBase = new B; ///constructor of B & A is called

---------

……..

delete pBase;   //Destructor of A is called

return 0;

}

Case 3 Output

Base constructor of class A

Derived  constructor of class B

Derived  Destructor of class B

---------------------------------------------------------------

Here Base class destructor is not called.

The only problem case is Base Class pointer with derived class memory.

while we assign the memory by statement A *pBase = new B;  compiler know that it will be B class , so proper constructor is called.

when we called delete pBase , it does not know which class memory it hold in run time. That s why we should have a mechanism so that system can call destructor of class B at run time.

to achieve the same , we need to create the destructor as virtual .Once we declare destructor as virtual system automatically delete proper memory & call the destructor of class B.

to resolve the issue of dynamic memory allocation of derived class in Base class pointer & avoid Memory leak , we need to have virtual destructor.

so we need to define the class like this

class A{

public :

A(){  cout<<”Base constructor of class A “;

virtual ~A(){  cout<<”Base destructor of class A “;

};

Class B : public A{

public :

B(){ cout<<”Derived constructor of class B” ;}

~B(){  cout<<”Derived desstructor of class B“};

};

int main(){

//Case 3 –> Base class pointer , derived class memory

 

A *pBase = new B; 

---------

……..

delete pBase;   //Destructor of A is called

return 0;

}

Case 3 Output

Base constructor of class A

Derived  constructor of class B

Derived  Destructor of class B

Base destructor of class A