জাভার অবস্ট্রাক্শন - Abstraction in Java Bangla

জাভার অবস্ট্রাক্শন - Abstraction in Java Bangla

জাভার অবস্ট্রাক্শনের সমস্ত বিষয় নিয়ে আলোচনা করা হলো : 

জাভার অবস্ট্রাক্শন  ( java Abstraction ) কি ? উদহারণ সহ

আমরা যখন ব্যাংকের বুথে যাই তখন এটিএম কার্ড বুথে ঢুকিয়ে টাকা উত্তোলন বা কত টাকা আমাদের রয়েছে তা দেখতে পারি। যখন আমাদের টাকা উত্তোলনের দরকার পরে তখন উইথড্র বাটনে চেপে টাকার এমাউন্ট লিখলেই  আমরা বুথ থেকে টাকা পেয়ে যাই এখানে বুথ কিভাবে বুজতে পারে এটা কোন ক্লায়ন্ট, ওনার কত টাকা আছে, সে কিভাবে মোট টাকা থেকে উত্তলনের টাকা বিয়োগ করছে তা কিন্তু আমরা দেখতে পারি না। যা সার্ভিস ক্লায়েন্টের প্রয়োজন তাই ক্লায়ন্ট দেখতে পারে বাকি ভিতরে কি এলগোরিদম হচ্ছে তা কিন্তু কাস্টমার দেখতে পারে না।  এই যে ব্যাংক তাদের গুরুত্বপূর্ণ তথ্য গোপন রাখছে এবং তাদের সার্ভিস গুলো দেখাচ্ছে তাই অবস্ট্রাক্শন (Abstraction)।
Abstraction : Abstraction is nothing but hiding the essential information and highlight the only set of services.

জাভাতে কেন অবস্ট্রাক্শন ব্যবহার করতে হয় ?

জাভাতে অবস্ট্রাক্শন ব্যবহারের মূল কারণ হলো ব্যবহারকারীর কাছ থেকে অপ্রয়োজনীয় বিবরণ লুকিয়ে রাখা। কোনো একটি বড় প্রোগ্রাম থেকে শুধুমাত্র প্রাসঙ্গিক ডেটা ব্যবহারকারীকে দেখানো হয়। প্রোগ্রামের জটিলতা দূর করতেও সহয়ওতা করে।  

ছবি দেখে অবস্ট্রাক্শন (Abstraction) বুঝার চেষ্টা করতে পারেন  


নিচের কোডটি বুঝার আগে দুটি জিনিস আগে বুজে নেই। 

১.অ্যাবস্ট্রাক্ট মেথডের কোনো বডি হয় না। 
২.কোনো ক্লাসে একটিমাত্র অ্যাবস্ট্রাক্ট মেথড থাকলেই ঐ ক্লাসটি অ্যাবস্ট্রাক্ট হয়ে যায়। 


package customar;
import java.util.Scanner;
abstract class Bank
{
   public String Name="WorldBank";
   public String IFSC_No="WorldBank999";
    
    public void bankdetails()
    {
        System.out.println("Our bank name is "+Name+"and IFSC code 

:"+IFSC_No);
    }
    abstract void deposite();
    abstract  void withdraw();
    abstract void chackbal(); 
    
            
}
class bankservice extends Bank
{
   private int bal=5000;
   private  int pwd;
  public  int money;
    
   @Override
   public void deposite()
   {
       System.out.println("Enter password "); 
       Scanner s=new Scanner(System.in);
       pwd=s.nextInt();
       if(pwd==456)
       {
            System.out.println("Enter Deposite amount"); 
            Scanner a=new Scanner(System.in);
          money=a.nextInt();
          bal=bal+money;
          System.out.println("Deposite amount"+money); 
           System.out.println("Total amount"+bal); 
          
       }
       else
       {
           System.out.println("Wrong password"); 
       }
   }
    @Override
  public  void withdraw()
   {
       System.out.println("Enter password "); 
       Scanner s=new Scanner(System.in);
       pwd=s.nextInt();
       if(pwd==456)
       {
            System.out.println("Enter Deposite amount"); 
            Scanner a=new Scanner(System.in);
          money=a.nextInt();
          bal=bal-money;
          System.out.println("Deposite amount"+money); 
           System.out.println("Total amount"+bal); 
          
       }
       else
       {
           System.out.println("Wrong password"); 
       }
   }
    
   @Override
    public void chackbal()
   {
       System.out.println("Enter password "); 
       Scanner s=new Scanner(System.in);
       pwd=s.nextInt();
       if(pwd==456)
       {
                
         System.out.println("Total amount"+bal); 
          
       }
       else
       {
           System.out.println("Wrong password"); 
       }
   }
}


public class Customar {

    
    public static void main(String[] args) {
        
        bankservice b=new bankservice();
        b.bankdetails();
       
        int ch;
       System.out.println("1.Deposite"); 
       System.out.println("2.Withdraw"); 
       System.out.println("3.Chack balance"); 
        Scanner s3=new Scanner(System.in);
       ch=s3.nextInt();
       switch(ch)
       {
           case 1: b.deposite();
           break;
           case 2: b.withdraw();
            break;
           case 3: b.chackbal();
           break;
           default:
           {
               System.out.println("Wrong choice"); 
           }
       }
    }
    
}


জাভাতে আমরা দুই ভাবে অবস্ট্রাক্শন পেতে পারি 
১. অ্যাবস্ট্রাক্ট ক্লাস (০-১০০%) 
২. ইন্টারফেস (১০০%)

ইন্টাফেসে সম্পূর্ণ রিকোয়ারমেন্ট কাস্টমারের থাকে আর অ্যাবস্ট্রাক্ট ক্লাসে কাস্টমার রিকোয়ারমেন্ট বলে দেয় আর ডেভেলপার নিজের ইচ্ছা মতো কোড সাজাই। 
 

 

১.অ্যাবস্ট্রাক্ট ক্লাস জাভা ( abstract class java )

  • যদি কোনো ক্লাসের কমপক্ষে একটি মাত্র অ্যাবস্ট্রাক্ট মেথড হলেই তাকে অ্যাবস্ট্রাক্ট ক্লাস বলে। 
  • অ্যাবস্ট্রাক্ট ক্লাসের জন্য কোনো অবজেক্ট তৈরী করা যায় না তবে এড্রেস ধরে কাজ করা যায়। 
  • অ্যাবস্ট্রাক্ট ক্লাসে অ্যাবস্ট্রাক্ট মেথড ও নন অ্যাবস্ট্রাক্ট মেথড উভয়কেই রাখা যায়। 
  • যদি কাজ এক হয় এবং তার ফলাফল ভিন্ন ভিন্ন হয় তখন আমরা অ্যাবস্ট্রাক্ট মেথড ব্যবহার করি। 

 


abstract class animal
{
    void eys()
    {
         System.out.println("It have Two Eys"); 
    }
    abstract void sound();
     abstract void eat();
}
class cat extends animal
{
    
    @Override
    void sound()
    {
       System.out.println("mew mew mew");  
    }
    @Override
    void eat()
    {
       System.out.println("Milk");  
    }
}
class tiger extends animal
{
    @Override
    void sound()
    {
       System.out.println("yaaw yaaw");  
    }
    @Override
    void eat()
    {
       System.out.println("Meat");  
    }
}

public class Zoo {
    public static void main(String[] args) {
        cat c=new cat();
        tiger t=new tiger();
        c.eat();c.eys();c.sound();
       t.eat();t.eys();t.sound();
    }
    
}



২.ইন্টারফেস ( interface java )

  • ইন্টারফেস এমন একটি ক্লাস যেখানে শুধুমাত্র অ্যাবস্ট্রাক্ট মেথডই থাকতে পারে। 
  • জাভাতে ইন্টারফেস ব্যবহার করতে implements/interface কীওয়ার্ডের প্রয়োজন হয়।
  • ইন্টারফেস ক্লাসে ডিফল্ট ভাবে ভ্যারিয়েবল public,static,final থাকে ।   
  • ইন্টারফেস ক্লাসে ডিফল্ট ভাবে মেথড public,abstract থাকে । 
  • JDK 1.8 ভার্শনের উপরে আপনি ইচ্ছা করলে এবং মেথড তৈরী করতে পারেন। 


পাবলিক : ভ্যারিয়েবলটি যেকোনো জায়গা থেকে ব্যবহার করা যায়। 
স্ট্যাটিক : ভ্যারিয়েবলটি অবজেক্ট ছাড়া রান হয়। 
ফাইনাল : ভ্যারিয়েবলের মান পরিবর্তন করা যাবে না কখনও।
  



package javaapplication18;

interface car {
    String Name= "BMW"; //Public + Static + Final
    int Speed =120; //Public + Static + Final
    abstract void start(); //Public + abstract
    abstract void stop(); //Public + abstract
    
    //jdk 1.8 you can implement defult
    default void color() //public but not abstract
    {
       System.out.println("Black"); 
    }
    
    //jdk 1.8 you can implement Static
    static void car_metal()
    {
       System.out.println("iron");  
    }
    
}

public class JavaApplication18 implements car {
    
   // prove variable are public // anywere access
    
    
    @Override
    public void start()
    {
         System.out.println("Insart key");
         
            // prove variable are public // anywere access
            System.out.println(Name);  
            
              // prove variable are Static // access without object
             System.out.println(Speed); 
             
             // prove variable are Final // No change
           //  Name= "Tosiba";
            
    }
    
    @Override
    public void stop()
    {
         System.out.println("Remove key");  
    }
    
    public static void main(String[] args)
    {
        JavaApplication18 c=new JavaApplication18();
        c.start();
        c.stop();
        //jdk 1.8 you can implement defult
        c.color();
        // prove variable are Static // access without object
             System.out.println(Speed); 
             
          //jdk 1.8 you can implement Static//call without object   
             car.car_metal();
    }

      
    
}