• ফ্রেমওয়ার্ক

    কম্পিউটার প্রোগ্রামিং


    জাভা প্রোগ্রামিং ভাষাতে লিখিত একটি সোর্স কোড। এটি কম্পাইল হবার পরে জাভা ভার্চুয়াল মেশিন দ্বারা রান হয়ে স্ট্যান্ডার্ড আউটপুট ডিভাইসে Hello World! দেখাবে।

    কম্পিউটার প্রোগ্রামিং (ইংরেজিComputer programming) হলো কিছু লিখিত নির্দেশ যা অনুযায়ী একটি কম্পিউটার কাজ করে। প্রোগ্রামের লিখিত রূপটিকে সোর্স কোড বলা হয়। যিনি সোর্স কোড লিখেন তাকে প্রোগ্রামার, কোডার বা ডেভেলপার বলা হয়। যেকোন বই যেমন একটি ভাষাতে যেমন ইংরেজি, রুশ, জাপানি, বাংলা, ইত্যাদিতে লেখা হয়, তেমনি প্রতিটি প্রোগ্রাম কোন একটি নির্দিষ্ট প্রোগ্রামিং ভাষাতে লেখা হয়,যেমন সি++,জাভা ইত্যাদি। প্রোগ্রাম রচনা করার সময় প্রোগ্রামারকে ঐ নির্দিষ্ট প্রোগ্রামিং ভাষার সিনট্যাক্স বা ব্যাকরণ মেনে চলতে হয়। [১]
    কম্পিউটার প্রোগ্রামিং হলো একটি প্রক্রিয়া যা একটি কম্পিউটিং সমস্যার মূল সূত্র থেকে এক্সিকিউটেবল কম্পিউটার প্রোগ্রামগুলির দিকে পরিচালিত করে। প্রোগ্রামিং ভাষা যেমন অ্যালগোরিদম তৈরি করে, বিশ্লেষণের উন্নয়ন, তাদের সঠিকতা এবং সম্পদ খরচ এবং বাস্তবায়নের এলগরিদমগুলির প্রয়োজনীয়তা যাচাই করে একটি প্রোগ্রামিং ভাষাতে অ্যালগরিদমগুলির অন্তর্ভুক্ত। সোর্স কোড এক বা একাধিক প্রোগ্রামিং ভাষায় লেখা আছে। প্রোগ্রামিং এর উদ্দেশ্য হল একটি নির্দিষ্ট নির্দেশনা খুঁজে বের করা যা একটি নির্দিষ্ট কার্য সম্পাদন বা প্রদত্ত সমস্যার সমাধান করা স্বয়ংক্রিয় হবে। প্রোগ্রামিং এর প্রক্রিয়াটি প্রায়ই অ্যাপ্লিকেশন ডোমেন, বিশেষ অ্যালগরিদম এবং আনুষ্ঠানিক যুক্তিবিজ্ঞান জ্ঞানের সহ বিভিন্ন বিষয়গুলিতে দক্ষতা প্রয়োজন।
    সম্পর্কিত কর্মগুলি সোর্স কোড পরীক্ষা, ডিবাগিং এবং বজায় রাখা, বিল্ড সিস্টেমের বাস্তবায়ন এবং কম্পিউটার প্রোগ্রামের মেশিন কোডের মত উপকারী জিনিসপত্রের ব্যবস্থাপনা অন্তর্ভুক্ত। এই প্রোগ্রামিং প্রক্রিয়ার অংশ হিসাবে বিবেচনা করা যেতে পারে, কিন্তু প্রায়ই সফ্টওয়্যার উন্নয়ন শব্দ শব্দ প্রোগ্রামিং, বাস্তবায়ন, বা সোর্স কোড প্রকৃত লেখা জন্য সংরক্ষিত কোডিং সঙ্গে এই বৃহত্তর প্রক্রিয়া জন্য ব্যবহার করা হয়। সফ্টওয়্যার ইঞ্জিনিয়ারিং সফ্টওয়্যার উন্নয়ন চর্চা সঙ্গে প্রকৌশল কৌশল সম্মিলান।

    প্রোগ্রামিং এর ধাপগুলো যেকোন সমস্যা সমাধানের ধাপগুলোর মতোই। প্রধান ধাপগুলো হলোঃ ১. সমস্যাকে সংজ্ঞায়িত করা ২. ইনপুট ও আউটপুট কি হবে তা নির্বাচন করা। ৩. ধারাবাহিক (ধাপে ধাপে) বর্ননা করা (এলগরিদম লেখা)। ৪. ফ্লোচার্ট অঙ্কন করা। ৫. প্রোগ্রামিং ভাষা নির্নয় করা ও কোড লেখা। ৬. কোড কম্পাইল ও ডিবাগ করা। ৭. ডকুমেন্টেশন তৈরি করা
    উদাহরণস্বরূপঃ সমস্যাঃ তিনটি সুংখার মধ্যে বড় সংখা বের করুন।
    প্রোগ্রামিং ভাষা
    প্রোগ্রামিং ভাষা (ইংরেজি ভাষায়: programming language) হচ্ছে এক ধরনের কৃত্রিম ভাষা (artificial language) যা কোন যন্ত্রের, বিশেষ করে কম্পিউটারের আচরণ নিয়ন্ত্রণ করার জন্য ব্যবহার করা হয়। মানুষের মুখের স্বাভাবিক ভাষাগুলোর মত প্রোগ্রামিং ভাষাগুলোও বাক্যতাত্ত্বিক (syntactic বা বাক্যস্থিত বিভিন্ন পদের মধ্যে সম্পর্ক কী হবে সে-সংক্রান্ত) ও আর্থ (semantic বা শব্দের অর্থসংক্রান্ত) নিয়ম মেনে চলে।
    তথ্য সুবিন্যস্তকরণ ও প্রক্রিয়াকরণে এবং অ্যালগোরিদমসমূহ নির্ভুলভাবে প্রকাশ করতে প্রোগ্রামিং ভাষা ব্যবহার করা হয়। কিছু কিছু লেখক প্রোগ্রামিং ভাষা বলতে কেবল সেই সব ভাষাকে বোঝান যেগুলো সম্ভাব্য সমস্ত অ্যালগোরিদম প্রকাশে সক্ষম;[১] কখনো কখনো সরল ধরনের কৃত্রিম ভাষাগুলোকে প্রোগ্রামিং ভাষা না বলে 'কম্পিউটার ভাষা (computer language) বলা হয়।
    এ পর্যন্ত বহু হাজার প্রোগ্রামিং ভাষা সৃষ্টি করা হয়েছে , এবং প্রতি বছরই নতুন নতুন প্রোগ্রামিং ভাষা উদ্ভাবন করা হচ্ছে।

    প্রোগ্রামিং ভাষার বিভিন্ন বৈশিষ্ট্যের ওপর ভিত্তি করে এর সংজ্ঞা দেয়া যায়:
    • কাজ (Function): প্রোগ্রামিং ভাষা হচ্ছে এক ধরনের ভাষা যা দিয়ে কম্পিউটার প্রোগ্রাম লেখা যায়, এবং এই প্রোগ্রামগুলোর সাহায্যে কম্পিউটারকে কোন গণণামূলক কাজ করার নির্দেশ দেয়া যায় [৩], এবং সম্ভব হলে কম্পিউটারের বাইরের যন্ত্রাংশ যেমন প্রিন্টার, রোবট[৪], ইত্যাদি নিয়ন্ত্রণ করা যায়।
    • লক্ষ্য (Target): প্রোগ্রামিং ভাষাগুলো থেকে স্বাভাবিক ভাষাগুলোর মধ্যে পার্থক্য হচ্ছে স্বাভাবিক মুখের ভাষা কেবল মানুষে-মানুষে যোগাযোগের জন্য ব্যবহৃত হয়, অন্যদিকে প্রোগ্রামিং ভাষাগুলোর মানুষকে যন্ত্রের কাছে আদেশ পৌঁছে দিতে সাহায্য করে। কিছু প্রোগ্রামিং ভাষা এক যন্ত্রকে আরেক যন্ত্রের সাথে যোগাযোগে সাহায্য করে। যেমন কিছু প্রোগ্রাম পোস্টস্ক্রিপ্ট প্রোগ্রাম তৈরির মাধ্যমে প্রিন্টার বা ডিসপ্লে নিয়ন্ত্রণ করতে পারে।
    • সংগঠন (Constructs): প্রোগ্রামিং ভাষায় সাধারণত কিছু সংগঠন থাকে যেগুলো দিয়ে বিভিন্ন উপাত্ত কাঠামো (data structure) সংজ্ঞায়িত করা হয় কিংবা নির্দেশ পালনের প্রবাহ বা ধারা নিয়ন্ত্রণ করা হয়।
    • প্রকাশক্ষমতা (Expressive power): গণনা তত্ত্বে (theory of computation) প্রোগ্রামিং ভাষাসমূহকে তারা কী ধরনের গণনা (computation) প্রকাশ করতে পারে, তার ওপর ভিত্তি করে শ্রেণীকরণ করা হয় (চম্‌স্কি অনুক্রম দেখুন)। সমস্ত টুরিং-সম্পূর্ণ ভাষাগুলো একই অ্যালগোরিদমের সেট বাস্তবায়ন করতে পারে। টুরিং-সম্পূর্ণ না হলেও কিছু ভাষাকে প্রায়ই প্রোগ্রামিং ভাষা বলা হয়, যেমন - অ্যানসাই/আইএসও এসকিউএল এবং চ্যারিটি। 

    প্রোগ্রামিং ভাষাগুলো কম্পিউটারকে নির্দেশ দেওয়ার জন্য ব্যবহৃত হয়। সে কারণে মানুষের মুখের ভাষা ও অন্যান্য অভিব্যক্তি থেকে এই ভাষাগুলোর প্রকৃতি আলাদা। প্রোগ্রামিং ভাষাতে সম্পূর্ণতা ও নির্ভুলতার মূল্য দেয়া হয়। স্বাভাবিক ভাষায় কথা বলে বা লেখার মানুষেরা একই শব্দের বহু অর্থ করতে পারেন এবং ছোটখাট ভুল করতে পারেন, কিন্তু তাদের মনের কথা প্রকাশ এতে তেমন ব্যাহত হয় না। অন্যদিকে, কম্পিউটার কেবল তা-ই পালন করে যা তাকে নির্দেশ দেয়া হয়, এবং কম্পিউটারের পক্ষে প্রোগ্রামার আসলেই কোন্‌ নির্দেশ দিতে চেয়েছিলেন তা বুঝতে পারা সম্ভব নয়। কোন প্রোগ্রামার প্রোগ্রামিং ভাষার সংজ্ঞা (language definition), প্রোগ্রাম, এবং প্রোগ্রামের ইনপুট – এই তিনের সমন্বয়ে সম্পূর্নরূপে নির্দেশ করে দেন প্রোগ্রামটি চালালে কী ঘটবে।
    অনেক প্রোগ্রামিং ভাষা একেবারে শূন্য থেকে নকশা করা হয়েছে, তারপর এগুলোতে প্রয়োজন অনুসারে পরিবর্তন আনা হয়েছে, অন্য প্রোগ্রামিং ভাষার সাথে এদের সম্মিলন ঘটানো হয়েছে, এবং পরিশেষে এগুলো বাস্তব ব্যবহার থেকে পরিত্যক্ত হয়েছে। একটি “সার্বজনীন” কম্পিউটার ভাষা তৈরি করার অনেক চেষ্টা করা হয়েছে, যে ভাষা হবে যেকোন উদ্দেশ্যে ব্যবহারযোগ্য, কিন্তু কোন চেষ্টাই সফল হয়নি।[৭] কাজের প্রকৃতির বৈচিত্র‌্যের কারণেই বিভিন্ন বিচিত্র কম্পিউটার ভাষা উদ্ভাবিত হয়েছে:
    • শখের প্রোগ্রাম-লেখকেরা ছোট ছোট স্ক্রিপ্ট আকারের প্রোগ্রাম লেখেন, আবার শত শত প্রোগ্রাম-লেখক মিলে বিশাল ব্যবস্থা গড়ে তোলেন।
    • প্রোগ্রাম-লেখকদের দক্ষতা তাদের পছন্দের প্রোগ্রামিং ভাষা কী হবে তা নির্ধারণ করে। নবিশ প্রোগ্রাম লেখক চান সরলতা, অন্যদিকে প্রতিষ্ঠিত প্রোগ্রাম-লেখকেরা জটিল ভাষাতে কাজ করতে অস্বাচ্ছন্দ্য বোধ করেন না।
    • মাইক্রোকন্ট্রোলার থেকে শুরু করে সুপার কম্পিউটার – বিভিন্ন গতি, আকার ও জটিলতার যন্ত্রের ওপর নির্ভর করে প্রোগ্রাম কী ভাষায় লেখা হবে।
    • কিছু প্রোগ্রাম একবার লেখা হয় ও যুগ যুগ ধরে পাল্টানো লাগে না। আবার কিছু প্রোগ্রামে প্রতিনিয়ত পরিবর্তন সাধন করতে হয়।
    • প্রোগ্রাম-লেখকদের পছন্দেরও ব্যাপার আছে। প্রোগ্রামাররা সাধারণত একটি নির্দিষ্ট ভাষাতে তাদের সমস্যাগুলো নিয়ে চিন্তা করতে ও আলোচনা করতে পছন্দ করেন।

    উদ্দেশ্য

    নিয়তই প্রোগ্রামিং ভাষাগুলোর উন্নতিসাধন করার চেষ্টা চলে এবং প্রায়ক্ষেত্রেই লক্ষ্য থাকে ভাষাতে উচ্চস্তরের বিমূর্তায়ন ব্যবহার করে সমস্যা সমাধানের ক্ষমতা বাড়ানো। একেবারে শুরুর দিককার প্রোগ্রামিং ভাষাগুলো কম্পিউটারের হার্ডওয়্যারের সাথে খুবই ঘনিষ্ঠভাবে জড়িত ছিল। নতুন প্রোগ্রামিং ভাষাগুলোতে অনেক নতুন ফিচার বা বৈশিষ্ট্য যোগ করা হয় যাতে প্রোগ্রামারদের কীভাবে তাদের প্রোগ্রামের হার্ডওয়্যার নির্দেশে রূপান্তরিত হবে তা নিয়ে চিন্তা করতে না হয়। ফলে প্রোগ্রামাররা এখন একই সময়ে আগের চেয়ে অনেক বেশি প্রোগ্রাম লিখতে পারেন
    প্রোগ্রামিং-এর জন্য বিশেষায়িত ভাষার ব্যবহার দূর করে মানুষের স্বাভাবিক ভাষা ব্যবহারের জন্য স্বাভাবিক ভাষা প্রসেসরের ব্যবহার অনেকে প্রস্তাব করেছেন। কিন্তু এটা বাস্তবায়ন করা কঠিন। আর এর সুফল নিয়েও বিতর্ক আছে। এট্‌সখার ডেইক্‌স্ট্রা মনে করতেন বিধিবদ্ধ ভাষা অর্থহীন সংগঠনসমূহ দূর করতে অত্যন্ত জরুরি। তিনি স্বাভাবিক ভাষায় প্রোগ্রাম লেখাকে বোকামি বলে মনে করতেন।  অ্যালান পেরলিস-ও এ ব্যাপারে নেতিবাচক অবস্থান নেন।

    উপাদানসমূহ

    সিনট্যাক্স

    প্রোগ্রামিং ভাষার বই
    কোন প্রোগ্রামিং ভাষার বাইরের রূপকে তার সিনট্যাক্স বলা হয়। বেশির ভাগ প্রোগ্রামিং ভাষাই সম্পূর্ণ টেক্সট-ভিত্তিক। এগুলি শব্দ, সংখ্যা ও বিরামচিহ্নবিশিষ্ট টেক্সট ব্যবহার করে, অনেকটা স্বাভাবিক ভাষাগুলির মতই। তবে কিছু কিছু প্রোগ্রামিং ভাষা আছে যেগুলি চিত্রভিত্তিক। এগুলি বিভিন্ন প্রতীকের মধ্যকার অবস্থানগত সম্পর্ক কাজে লাগিয়ে প্রোগ্রাম লিখতে সহায়তা করে।
    কোন প্রোগ্রামিং ভাষার প্রতীকগুলি কী কী উপায়ে একত্রিত হয়ে সিনট্যাক্সগতভাবে সঠিক প্রোগ্রাম তৈরি করতে পারে, ভাষাটির সিনট্যাক্সে তার বিবরণ থাকে। আর কোন প্রতীকসমষ্টির অর্থ কী হবে, তা নির্ধারণ করে ভাষাটির সেমান্টিক্‌স।
    প্রোগ্রামিং ভাষার সিনট্যাক্স সাধারণত নিয়মিত এক্সপ্রেশন (regular expression) ([[আভিধানিক বিশ্লেষণ|আভিধানিক গঠনের জন্য) এবং বাকাস-নাউর রূপ (Backus-Naur Form) (ব্যাকরণিক গঠনের জন্য) এই দুইয়ের সমন্বয়ে তৈরি করা হয়।
    নীচে লিস্পের ওপর ভিত্তি করে লেখা একটি সরল ব্যাকরণ দেয়া হল:
    expression ::= atom | list
    atom ::= number | symbol
    number ::= [+-]?['0'-'9']+
    symbol ::= ['A'-'Z''a'-'z'].*
    list ::= '(' expression* ')'

    উপরের ব্যাকরণটি নীচের জিনিসগুলিকে সংজ্ঞায়িত করেছে:
    • একটি expression হয় একটি atom অথবা একটি list;
    • একটি atom হয় একটি number অথবা একটি symbol;
    • একটি number হচ্ছে এক বা একাধিক দশমিক অঙ্কের অবিভক্ত ধারা, এবং ধারাটির আগে ঐচ্ছিকভাবে যোগ বা বিয়োগ চিহ্ন বসানো যেতে পারে;
    • একটি symbol হচ্ছে একটি ইংরেজি বর্ণ এবং তাকে অনুসরণকারী শূন্য বা তার বেশি যেকোন সংখ্যক ক্যারেক্টার (ফাঁকাস্থান ব্যতীত); এবং
    • একটি list হচ্ছে একজোড়া বন্ধনীর মধ্যে শূন্য বা তার বেশি সংখ্যক expression
    এই ব্যাকরণ সঠিকভাবে অনুসরণকারী কিছু টোকেনের উদাহরণ: '12345', '()', '(a b c232 (1))'
    সিনট্যাক্সগতভাবে সঠিক প্রোগ্রাম মাত্রেই সেমান্টিক্‌স বা অর্থগতভাবে সঠিক হবে, তা নয়। অনেক সিনট্যাক্সগতভাবে সঠিক প্রোগ্রাম তাই অনুবাদ বা নির্বাহ করার সময় ত্রুটির সৃষ্টি করতে পারে। কোন কোন ক্ষেত্রে এরকম প্রোগ্রাম অসংজ্ঞায়ির আচরণ (undefined behavior) প্রদর্শন করতে পারে। আবার কোন প্রোগ্রাম প্রোগ্রামিং ভাষার সমস্ত নিয়মকানুন মেনে চললেও এটি প্রোগ্রামার যা করতে চেয়েছিলেন সেই অর্থে না-ও বাস্তবায়িত হতে পারে।
    মানুষের মুখের স্বাভাবিক ভাষাতেও এর উদাহরণ মেলে। কোন ব্যাকরণগতভাবে শুদ্ধ বাক্য অর্থহীন হতে পারে, যেমন:
    • "Colorless green ideas sleep furiously." - এই ইংরেজি বাক্যটি ব্যাকরণগতভাবে শুদ্ধ কিন্তু এর কোন সর্বজনগৃহীত অর্থ নেই।
    • "John is a married bachelor." - এই বাক্যটি ব্যাকরণগতভাবে শুদ্ধ কিন্তু এমন একটি অর্থ প্রকাশ করে যা সত্য নয়।
    নীচের সি প্রোগ্রামিং ভাষায় লেখা কোডটি সিনট্যাক্সগতভাবে শুদ্ধ, কিন্তু এটি এমন একটি অপারেশন সম্পাদন করে যা সেমান্টিক্‌সগতভাবে বা অর্থগতভাবে সংজ্ঞায়িত নয়। (যেহেতু p একটি নাল পয়েন্টারp->real এবং p->im অপারেশনগুলি অর্থহীন):
    complex *p = NULL;
    complex abs_p = sqrt (p->real * p->real + p->im * p->im);

    টাইপ ব্যবস্থা

    যেকোন প্রোগ্রামিং ভাষা মান (values) ও এক্সপ্রেশনগুলিকে বিভিন্ন “টাইপে” শ্রেণিকরণ করে। এই শ্রেণিকরণ, কীভাবে টাইপগুলি ব্যবহার করা যাবে এবং টাইপগুলির একে অপরের সাথে সম্পর্ক কী, তা সংজ্ঞায়িত থাকে প্রোগ্রামিং ভাষাটির টাইপ ব্যবস্থায়। ভাষাটিতে কী ধরনের উপাত্ত কাঠামো ব্যবহার করা যাবে, টাইপ ব্যবস্থায় মূলত তারই বিবরণ থাকে। বিধিগত গণিত ব্যবহার করে টাইপ ব্যবস্থাগুলি ডিজাইন ও গবেষণা “টাইপ তত্ত্বের” আলোচ্য।
    আধুনিক ডিজিটাল কম্পিউটারের ভেতরে সমস্ত উপাত্তই শূন্য বা এক আকারে রক্ষিত থাকে (দ্বিমিক সংখ্যা ব্যবস্থা দেখুন)। এই উপাত্ততে বাস্তব বিশ্বের নানা তথ্য যেমন নাম, ব্যাংক অ্যাকাউন্ট, পরিমাপ, ইত্যাদি প্রকাশ পেতে পারে। প্রোগ্রামিং ভাষা নিম্নস্তরের দ্বিমিক উপাত্তকে এই উচ্চ-স্তরের তথ্যের ধারণায় বাস্তবায়ন করে উপাত্ত টাইপের সাহায্য নিয়ে। এছাড়া আরও কিছু বিমূর্ত টাইপ আছে যেগুলি প্রোগ্রামের নিরাপত্তার সুবিধার্থে কিংবা প্রোগ্রামারকে অর্থহীন বিবৃতির ব্যাপারে সাবধান করে দেয়ার জন্য ব্যবহৃত হয়।
    প্রোগ্রামিং ভাষাগুলিকে তাদের টাইপ ব্যবস্থাগুলির ওপর ভিত্তি করে শ্রেণীবিভাগ করা যায়।

    টাইপকৃত বনাম অ-টাইপকৃত ভাষা

    কোন প্রোগ্রামিং ভাষার একটি উপাত্ত টাইপের জন্য সংজ্ঞায়িত অপারেশনগুলি যখন অন্য একটি উপাত্ত টাইপের ওপর প্রয়োগ করা যায় না, তখন সেই ভাষাটিকে “টাইপকৃত ভাষা” বলা হয়। [১১] উদাহরণস্বরূপ, "this text between the quotes" একটি স্ট্রিং। বেশির ভাগ প্রোগ্রামিং ভাষায় স্ট্রিং-কে কোন সংখ্যা দিয়ে ভাগ করা অর্থহীন। তাই বেশির ভাগ ভাষাতে কোন প্রোগ্রামকে এই ধরনের অপারেশন সম্পাদন করতে বাধা দেয়া হয়। কিছু কিছু ভাষায় এই অর্থহীন অপারেশনটি প্রোগ্রামটি কম্পাইল করার সময় ধরা হয়; একে বলা হয় “স্থির টাইপ পরীক্ষা” (static type checking), এবং কম্পাইলার অপারেশনটি প্রত্যাখ্যান করে। আবার অন্য কিছু ভাষায় এই শরনের অপারেশন যখন প্রোগ্রামটি চালানো হয় বা “রান” করা হয়, তখন ধরা হয়; একে বলা হয় “চলমান টাইপ পরীক্ষা” (dynamic type checking), এবং এতে “রান-টাইম” এক্সেপশন সৃষ্টি হয়।

    নিম্নস্তরের ভাষা

    নিম্নস্তরের ভাষা(low level language) সরাসরি কম্পিউটারের প্রধান মেমোরির উপর কাজ করতে পারে। অ্যাসেম্বলি ভাষা একটি নিম্নস্তরের ভাষা,এ ভাষায় সরাসরি কম্পিউটারের রেজিস্টারকে নিয়ন্ত্রণ করে কাজ করতে হয়। এ ভাষাগুলো হার্ডওয়্যারের উপর নির্ভরশীল,তাই এক কম্পিউটারে অ্যাসেম্বলি ভাষায় লেখা প্রোগ্রাম অন্য কম্পিউটারে কাজ নাও করতে পারে।



    ফ্রেমওয়ার্ক


    সফটওয়্যার তৈরিতে ফ্রেমওয়ার্ক হল একটি সাহায্যকারী কাঠামো যার উপর নির্ভর করে অন্য সফটওয়্যার প্রজেটের তৈরি ও উন্নয়ন করা যায়। একটি ফ্রামওয়ার্কের মধ্যে সাপোর্ট প্রোগ্রাম, কোড লাইব্রেরী, স্ক্রিপটিং ল্যাংঙ্গুয়েজ, ও অন্যান্য সাহায্যকারী সফটওয়্যারের সমাবেশ থাকে যা একটি সফটওয়্যার প্রজেটের বিভিন্ন কম্পোনেন্টের ঊন্নয়ন ও সংযোজনের জন্য ব্যবহৃত হয়।
    সফটওয়্যার উন্নয়নকে সুবিধাদানের জন্যই ফ্রেমওয়ার্ক তৈরি করা হয়। ফ্রেমওয়ার্ক একজন কম্পিউটার প্রোগ্রামার বা ডিজাইনারকে সফটওয়ার তৈরির খুঁটিনাটি অথচ শ্রমসাধ্য ও সময় সাপেক্ষ্য বিষয় গুলো তৈরি থেকে মুক্তি দেয়। এতে কম্পিউটার প্রোগ্রামার বা ডিজাইনার সফটওয়ারের বিভিন্ন চাহিদার দিকে বেশী আলোকপাত করতে পারেন। ফলে একজন প্রোগ্রামারের নিম্ন স্তরের প্রোগ্রামিং (Low Level Programming ) এর জন্য সময় ব্যয় করতে হয় না।
    কম্পিউটার আপ্লিকেশন বাইরে ফ্রেমওয়ার্ককে কতগুলি পদ্ধতি এবং প্রযুক্তির সমাবেশ হিসাবে চিন্তা করা যেতে পারে যা কোন জটিল সমস্যা সমাধানের জন্য ব্যবহার করা হয়।

    স্প্রিং কাঠামো


    স্প্রিং কাঠামো বা স্প্রিং ফ্রেমওয়ার্কটি একটি অ্যাপ্লিকেশন ফ্রেমওয়ার্ক এবং জাভা প্ল্যাটফর্মের জন্য কন্ট্রোল কন্টেইনারের বিপরীতধর্মী । এর মূল বৈশিষ্ট্যগুলি কোনও জাভা অ্যাপ্লিকেশন দ্বারা ব্যবহার করা যেতে পারে, তবে জাভা EE (এন্টারপ্রাইজ সংস্করণ) প্ল্যাটফর্মের উপরে ওয়েব অ্যাপ্লিকেশনগুলি নির্মাণের জন্য এক্সটেনশন রয়েছে। যদিও ফ্রেমওয়ার্ক কোনও নির্দিষ্ট প্রোগ্রামিং মডেল প্রয়োগ করে না তবে এটি জাভা সম্প্রদায়ে এন্টারপ্রাইজ জাভাবিণ (ইজেবি) মডেলের জন্য অতিরিক্ত বা এমনকি প্রতিস্থাপন হিসাবে জনপ্রিয় হয়ে উঠেছে। এটি ওপেন সোর্সও বটে ।

    মডিউল


    দু ধরনের কনফিগারেশন রয়েছে এতে , এক , xml নির্ভর ও দুই , টিকা নির্ভর ।

    নকশার মূলনীতি

    দু ধরনের নকশা প্রকার রয়েছে এতে , এক , কন্ট্রোল ধারক এর বিচ্ছিন্নতা (নির্ভরতা ইনজেকশন) ও দুই , দৃষ্টিভঙ্গি ভিত্তিক প্রোগ্রামিং কাঠামো। [২]

    কন্ট্রোল ধারক এর বিচ্ছিন্নতা (নির্ভরতা ইনজেকশন)

    নির্ভরতা ইনজেকশন (DI) একটি নকশা প্যাটার্ন যা প্রোগ্রামিং কোড থেকে নির্ভরতা সরিয়ে দেয় যাতে এটি পরিচালনা করা এবং অ্যাপ্লিকেশনটি পরীক্ষা করা সহজ হয় । নির্ভরতা ইনজেকশন আমাদের প্রোগ্রামিং কোড loosely মিলিত করে তোলে।
    স্প্রিং কাঠামোতে নির্ভরতা ইনজেকশন দুটি উপায় উপলব্ধ করা হয়
    1. নির্মাতা দ্বারা
    2. সেট্টার পদ্ধতি দ্বারা

    দৃষ্টিভঙ্গি ভিত্তিক প্রোগ্রামিং কাঠামো

    এর অন্তর্গত হচ্ছে দৃষ্টিভঙ্গি, পরামর্শ, পয়েন্টকাট, যোগফল, AOP প্রক্সি এবং বয়ন।

    তথ্য অ্যাক্সেস ফ্রেমওয়ার্ক

    লেনদেন ব্যবস্থাপনা

    মডেল-ভিউ-নিয়ামক ফ্রেমওয়ার্ক

    স্প্রিং কাঠামো ব্যবহার করে প্রতিনিধিত্বমূলক অবস্থা স্থানান্তর ধরনের ওয়েব সার্ভিস সহজেই তৈরী করা যায়। Restful ওয়েব সার্ভিস স্প্রিং কাঠামোর MVC স্থাপত্যের অংশ। এছাড়া গ্রাহক সিস্টেম তৈরিতে স্প্রিং কাঠামোর রেস্ট-কাঠামো ব্যবহার করা যায়।

    রিমোট অ্যাক্সেস ফ্রেমওয়ার্ক

    কনভেনশন দ্বারা কোডিং

    এটি কনভেনশন ওভার কনফিগারেশন নামেও পরিচিত। রুবি অন রেইলস ওয়েব ফ্রেমওয়ার্কের দর্শনের বর্ণনা দেওয়ার জন্য ড্যানিশ পোগ্রামার ডেভিড হাইনমিয়ার হানসন এই ধারণাকে উপস্থাপন করেছিলেন।
    উদাহরণস্বরূপ, মডেল এ একটি ক্লাস সেলস থাকলে, ডাটাবেসের সংশ্লিষ্ট টেবিলের ডিফল্ট নাম "সেলস" হয়। এই কনভেনশন থেকে বিচ্যুত হলেই কেবল এই নামগুলি সম্পর্কে কোড লিখতে হবে।

    স্প্রিং বুট

    স্প্রিংএর এই সুবিধাটির নাম স্প্রিং বুট। স্প্রিং বুট ফ্রেমওয়ার্ক টি স্প্রিং টিম দ্বারা গোড়া থেকে তৈরি করা হয়নি। মূলত বিদ্যমান স্প্রিং ফ্রেমওয়ার্কের ওপর এটি তৈরী হয়েছে। বিদ্যমান স্প্রিং কাঠামোর প্রকল্পগুলো সরাসরি স্প্রিং বুট এপ্লিকেশন এ রূপান্তর কিছুটা দুঃসাধ্য। তবে নতুন প্রকল্প তৈরীতে (গ্রিনফিল্ড প্রজেক্ট) এটি খুব কার্যকরী। [৩]
    বৈশিষ্ট্য:
    1. স্বনির্ভর অ্যাপ্লিকেশন তৈরি করা
    2. সরাসরি টম্যাট বা জেটি এম্বেড করা (ওয়ার ফাইলগুলি স্থাপন করার দরকার নেই)
    3. আপনার Maven কনফিগারেশন সহজ করার জন্য মতামতযুক্ত 'স্টার্টার' প্রকল্প অবজেক্ট মডেল (POMs) প্রদান করা
    4. স্বয়ংক্রিয়ভাবে স্প্রিং কনফিগার করা
    5. একেবারে কোন কোড লেখার এবং এক্সএমএল কনফিগারেশন প্রয়োজন নেই
    স্প্রিং টিম (দ্য পাইভোটাল টিম) নিম্নলিখিত তিনটি পন্থা সরবরাহ করেছে এপ্লিকেশন তৈরির ক্ষেত্রে ।
    1. স্প্রিং বুট CLI টুল ব্যবহার করে
    2. স্প্রিং এসটিএস আইডিই ব্যবহার করে
    3. স্প্রিং Initializr ওয়েবসাইট ব্যবহার করে (https://start.spring.io/)
    স্প্রিং বুট ব্যবহার করে তিন রকম স্প্রিং-ভিত্তিক অ্যাপ্লিকেশন বিকাশ করা যায় :
    1. জাভা ভিত্তিক অ্যাপ্লিকেশন
    2. গ্রোভি অ্যাপ্লিকেশন
    3. কোটলিন অ্যাপ্লিকেশন
    বিভিন্ন পন্থা ও তাতে তৈরী করা এপ্লিকেশনগুলোর সম্পর্ক নিম্নরূপ :
    পন্থাজাভা ভিত্তিক অ্যাপ্লিকেশনগ্রোভি অ্যাপ্লিকেশনকোটলিন অ্যাপ্লিকেশন
    স্প্রিং বুট CLIনাহ্যাঁনা
    স্প্রিং এসটিএস আইডিইহ্যাঁহ্যাঁনা
    স্প্রিং Initializrহ্যাঁহ্যাঁহ্যাঁ
    স্প্রিং বুট ফ্রেমওয়ার্ক প্রোগ্রামিং মডেল গ্রোভি প্রোগ্রামিং মডেল দ্বারা অনুপ্রাণিত। স্প্রিং বুট অভ্যন্তরীণভাবে ডিফল্ট ইম্পোর্ট এবং কনফিগারেশন সরবরাহ করতে কিছু গ্রোভি ভিত্তিক কৌশল এবং সরঞ্জাম ব্যবহার করে।স্প্রিং বুট ফ্রেমওয়ার্কটিও তার এনোটেশনগুলিতে বিদ্যমান স্প্রিং ফ্রেমওয়ার্ক এনোটেশনগুলিকে সংযুক্ত করে। স্প্রিং বুট ফ্রেমওয়ার্কটি স্পষ্টভাবে নতুন প্রোগ্রামিং মডেলের মাধ্যমে স্প্রিং-জাভা ভিত্তিক অ্যাপ্লিকেশন প্রোগ্রামিং মডেলে পরিবর্তন আনে ।
    যদি কোনো স্প্রিং বুট এপ্লিকেশনকে কোনো বিদ্যমান টমক্যাট-এ বা অন্য কোনো এন্টারপ্রাইস জাভা সার্ভার (যেমন : ওয়েবস্পেয়ার , ওয়েবলজিক , জে বস ইত্যাদি ) এ স্থাপন করতে হয় তবে তিনটি স্বজ্ঞাত পরিবর্তন করতে হবে:
    • জার বিল্ড থেকে মাভেনের ওয়ার বিল্ডে চলে যান
    • আপনার pom.xML ফাইলে স্প্রিং-বুট-মাভেন-প্লাগইন এর ঘোষণা গোপন করুন
    • অ্যাপ্লিকেশনটিতে একটি ওয়েব এন্ট্রি পয়েন্ট যুক্ত করুন। এভাবে পরিবর্তন করুন:
    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    public class Application extends SpringBootServletInitializer {
       public static void main(String[] args) {
           SpringApplication.run(applicationClass, args);
       }
       @Override
       protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
           return application.sources(applicationClass);
       }
       private static Class<Application> applicationClass = Application.class;
    }
    @RestController
    class GreetingController {
       @RequestMapping("/hello/{name}")
       String hello(@PathVariable String name) {
           return "Hello, " + name + "!";
       }
    }


  • 0 comments:

    Post a Comment

    New Research

    Attention Mechanism Based Multi Feature Fusion Forest for Hyperspectral Image Classification.

    CBS-GAN: A Band Selection Based Generative Adversarial Net for Hyperspectral Sample Generation.

    Multi-feature Fusion based Deep Forest for Hyperspectral Image Classification.

    ADDRESS

    388 Lumo Rd, Hongshan, Wuhan, Hubei, China

    EMAIL

    contact-m.zamanb@yahoo.com
    mostofa.zaman@cug.edu.cn

    TELEPHONE

    #
    #

    MOBILE

    +8615527370302,
    +8807171546477