জাভাতে বস্তুর মতো কাঠামো করুন


195

এটি কি জাভা উপায়ের মতো অবজেক্টের মতো কাঠামো তৈরির বিপক্ষে?

class SomeData1 {
    public int x;
    public int y;
}

আমি অ্যাক্সেসর এবং মিউটরগুলির সাথে আরও একটি জাভা পছন্দ মতো ক্লাস দেখতে পাচ্ছি।

class SomeData2 {
    int getX();
    void setX(int x);

    int getY();
    void setY(int y);

    private int x;
    private int y;
}

প্রথম উদাহরণ থেকে শ্রেণিটি উল্লেখযোগ্যভাবে সুবিধাজনক।

// a function in a class
public int f(SomeData1 d) {
    return (3 * d.x) / d.y;
}

এটি হিসাবে সুবিধাজনক নয়।

// a function in a class
public int f(SomeData2 d) {
    return (3 * d.getX()) / d.getY();
}

9
পাবলিক পরিবর্তনযোগ্য ক্ষেত্রগুলির পরিবর্তে, পাবলিক অপরিবর্তনীয় ক্ষেত্রগুলি বা প্যাকেজ-স্থানীয় পরিবর্তনযোগ্য ক্ষেত্রগুলি বিবেচনা করুন। হয় ভাল আইএমএইচও হবে।
পিটার লরি

মনে রাখবেন যে, গেটার্স এবং সেটটারগুলি কুৎসিত / ভার্ভোজ যখন, এটি জাভা হৃদয়ের একধরণের। এটি একটি সংক্ষিপ্ত ভাষা। অন্যদিকে, যদিও আপনার যে কোনওটিই টাইপ করা উচিত নয়, কারণ এটি আপনার আইডিই আপনার জন্য করে does গতিশীল ভাষায় আপনাকে কম টাইপ করতে হবে, তবে আপনাকে টাইপ করতে হবে (সাধারণত, যদিও আইডিইগুলি সাহায্য করতে পারে)।
ড্যান রোজনস্টার্ক

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

@ ব্যবহারকারী924272: পুনরায় "বর্তমান প্রবণতা সি-এর মতো স্ট্রাক্ট অফ-হিপ নিযুক্ত করে পুরো বৃত্তে চলেছে"। আপনি জাভাতে কি করবেন ??? আইএমএইচও, এটি এমন একটি অঞ্চল যেখানে জাভা তার বয়স দেখাচ্ছে ...
টুলমেকারস্টেভ

@ টুলমেকারস্টেভ - আমি একটি চেনাশোনা দেখছি। শুধু আমি একাই না. বিরতিহীন আবর্জনা সংগ্রহ করতে আজুলের মতো সংস্থাগুলি উত্তপ্ত। জাভা পুরানো। সত্য। যে ইঞ্জিনিয়াররা দুর্বলতা দেখায় এবং শোক করার পরিবর্তে এটি সম্পর্কে কিছু করে? তারা শ্রদ্ধার প্রাপ্য! আমার কাছ থেকে আজুলের কাছে +১০ :-)
ব্যবহারকারী924272

উত্তর:


62

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

অনুশীলনে, বেশিরভাগ ক্ষেত্রে সহজ সরল এবং সেটটার রয়েছে ters একটি সম্ভাব্য সমাধান এর মতো দেখাবে:

public property String foo;   
a->Foo = b->Foo;

আপডেট: জাভা 7 বা সম্ভবত কখনও সম্পত্তি সম্পত্তি যুক্ত হবে এটি অত্যন্ত অসম্ভব। গ্রোভি, স্কালা ইত্যাদির মতো অন্যান্য জেভিএম ভাষা এখন এই বৈশিষ্ট্যটিকে সমর্থন করে। - অ্যালেক্স মিলার


28
এটি খুব খারাপ, আমি সি # স্টাইলের বৈশিষ্ট্যগুলি পছন্দ করি (যা আপনি কী বলছেন তা মনে হয়)
জন অনস্টট

2
সুতরাং ওভারলোডিং ... ব্যক্তিগত ইন _ x ব্যবহার করুন; সর্বজনীন শূন্য এক্স (অন্তর্নির্মিত মান) {_x = মান; } পাবলিক ইনট এক্স () {রিটার্ন _ x; }
গর্ডন

12
আমি ব্যবহার করতে সক্ষম হওয়া পছন্দ করি =, যা আমার মতে কোডটি পরিষ্কার করে তোলে।
Svish

6
@ টি-বুল: আপনার xদু'টি ভিন্ন ভিন্ন জিনিস যা আপনি পেতে পারেন , এটি একটি ভাল ধারণা তৈরি করে না। আইএমএইচও, এটি একটি দুর্বল পরামর্শ, কারণ এটি মানব পাঠকদের বিভ্রান্তির কারণ হতে পারে। বেসিক নীতি: পাঠককে দ্বিগুণ গ্রহণ করবেন না; আপনি যা বলছেন তা সুস্পষ্ট করুন - বিভিন্ন সত্তার জন্য আলাদা আলাদা নাম ব্যবহার করুন। এমনকি যদি পার্থক্যটি কেবল একটি আন্ডারস্কোরকে আগে থেকেই চাপানো হয়। সত্তাগুলি পৃথক করতে চারদিকে বিরামচিহ্নের উপর নির্ভর করবেন না।
টুলমেকারস্টেভ

2
@ টুলমেকারস্টেভ: কোডিং ডগমা (কোডিং শৈলীর বিপরীতে) রক্ষার বিষয়টি যখন আসে তখন "বিভ্রান্তির কারণ হতে পারে" এটি সবচেয়ে সাধারণ এবং এখনও সবচেয়ে দুর্বল যুক্তি। সবসময়ই এমন কেউ আছেন যিনি সহজ জিনিসগুলির দ্বারা বিভ্রান্ত হতে পারেন। আপনি সর্বদা কাউকে এমন অভিযোগ পেয়ে দেখতে পাবেন যে তিনি জেগে থাকার পরে এবং অর্ধসপ্তাহ বা এমন কিছু কোড করে এবং তারপরে বিভ্রান্তিকর কোডিং শৈলীতে দোষারোপ করার পরে ভুল করেছিলেন। আমি যে গণনা করতে দেয় না। এই স্টাইলটি বৈধ, সুস্পষ্ট এবং নামস্থান পরিষ্কার রাখে। এছাড়াও, এখানে আলাদা আলাদা সত্ত্বা নেই, এর চারপাশে / এক / সত্তা এবং কিছু বয়লারপ্লেট কোড রয়েছে।
টি-বুল

290

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

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

1999 থেকে জাভা কোড কনভেনশনগুলি এবং এখনও অপরিবর্তিত।

10.1 ইনস্ট্যান্স এবং ক্লাস ভেরিয়েবলগুলিতে অ্যাক্সেস সরবরাহ করা

কোনও কারণ বা ক্লাস ভেরিয়েবলকে উপযুক্ত কারণ ছাড়াই সর্বজনীন করবেন না। প্রায়শই, উদাহরণের ভেরিয়েবলগুলি স্পষ্টভাবে সেট করা বা অর্জিত হওয়া প্রয়োজন হয় না যা প্রায়শই পদ্ধতি কলগুলির পার্শ্ব প্রতিক্রিয়া হিসাবে ঘটে।

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

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-137265.html#177

http://en.wikipedia.org/wiki/Plain_old_data_structure

http://docs.oracle.com/javase/1.3/docs/guide/collections/designfaq.html#28


88
প্রকৃতপক্ষে একটি অনুমোদিত উত্স থাকার জন্য +1। অন্য প্রতিটি উত্তর হ'ল লোকেরা তাদের মতামতকে ঘুরপাক খায় যেমন তারা সত্য।
আর্টঅফ ওয়ারফেয়ার

1
একটি জাভা বিনের স্পেসিফিকেশন রয়েছে যা গেট এবং সেট পদ্ধতি ব্যবহার করে বৈশিষ্ট্যগুলিতে অ্যাক্সেসের একটি শিল্প-মানের উপায় ... একটি ওভারভিউয়ের জন্য en.wikedia.org/wiki/JavaBeans দেখুন ।
ব্যবহারকারী 924272

4
@ ব্যবহারকারী924272: জাভা বিনগুলি এই উত্তরটির সাথে সম্পর্কিত কীভাবে সুনিশ্চিত, যা "সার্বজনীন দৃষ্টান্তের ভেরিয়েবলগুলি" ব্যবহার করার উপযুক্ত হলে আলোচনা করে? যদি বৈশিষ্টটি স্বয়ংক্রিয়ভাবে অ্যান্টিস্ট্যান্ট ভেরিয়েবলগুলিকে বৈশিষ্ট্যগুলিতে রূপান্তরিত করার মানক উপায় ছিল, তবে সি #, এটি প্রাসঙ্গিক হতে পারে। কিন্তু তাই না, তাই না? এটি কেবলমাত্র এই জাতীয় ম্যাপিং তৈরি করতে বয়লারপ্লেট গেটার এবং সেটটারগুলির নাম নির্দিষ্ট করে।
টুলমেকারস্টেভ

@ToolmakerSteve। এটি একটি জাভা প্রশ্ন। এছাড়াও, প্রশ্নটি একটি সাধারণ সমস্যা যেখানে একটি স্পেসিফিকেশন বিদ্যমান সেখানে অন্তর্ভুক্ত। একটি পুরানো-স্কুল দৃষ্টিকোণ থেকে, ক্ষেত্রের মিউটেশনগুলি ডিবাগ করা আরও সহজ যখন এটি করার কোনও মানক উপায় থাকে - একটি সেটারে ব্রেকপয়েন্ট স্থাপন করুন set এটি সম্ভবত আধুনিক ডিবাগারগুলির সাথে অচল হয়ে পড়েছে, তবুও আমি এমন ক্লাসগুলিকে ভ্রান্ত করতে বাধ্য করেছি যা সরাসরি "পাঞ্চ" করে দেয় বস্তুগুলি ... এটি যখন ছোট অ্যাপ্লিকেশনগুলির জন্য ঠিক আছে, এটি বড় অ্যাপ্লিকেশন এবং বৃহত সংস্থার জন্য সত্যিকারের মাথাব্যথা
ইউজার 924272

223

সত্যিই সাধারণ জ্ঞান ব্যবহার করুন। আপনার মতো কিছু থাকলে:

public class ScreenCoord2D{
    public int x;
    public int y;
}

তারপরে গেটর এবং সেটারগুলিতে এগুলি গুছিয়ে রাখার সামান্য বিন্দু নেই। আপনি কখনই কোনও এক্স, y পুরো পিক্সেলগুলিতে অন্য কোনও উপায়ে সমন্বয় করতে পারবেন না। গেটার্স এবং সেটটারগুলি আপনাকে কেবল ধীর করবে।

অন্যদিকে, সাথে:

public class BankAccount{
    public int balance;
}

ভবিষ্যতের কোনও সময় আপনি ভারসাম্য গণনা করার উপায়টি পরিবর্তন করতে পারেন। এটি সত্যই getters এবং সেটার ব্যবহার করা উচিত।

আপনি কেন ভাল অনুশীলন প্রয়োগ করছেন তা জানার পক্ষে এটি সর্বদা পছন্দনীয় , যাতে নিয়মগুলি বাঁকানো ঠিক হয় তবে আপনি জানতে পারেন।


3
আমি এই উত্তর সঙ্গে বরাবর যেতে এবং আরও বলে যে আপনি পাবলিক ক্ষেত্রের সাথে একটি বর্গ তাই যতদিন ক্ষেত্র তৈরি করতে পারেন সাহসী একে অপরের থেকে স্বতন্ত্র। অর্থাত্ একটি ক্ষেত্র অন্যটির উপর নির্ভর করে না। এটি বেশিরভাগ ক্ষেত্রে, কোনও ফাংশন থেকে একাধিক ফেরতের মানগুলির জন্য, বা মেরু সহ-বিরোধিতার ক্ষেত্রে বেশ কার্যকর হতে পারে। {কোণ, দৈর্ঘ্য} যা একসাথে যায় তবে কোনও অভ্যন্তরীণ উপায়ে একে অপরের উপর নির্ভর করে না।
স্পেসেন জ্যাসেট

@ স্পেসেনজ্যাসেট: এফওয়াইআই, আমি দেখতে পাচ্ছি না যে কীভাবে আপনার উদাহরণগুলি (একাধিক রিটার্ন মান; মেরু স্থানাঙ্ক) কোনও পাবলিক ফিল্ড বনাম গেটর / সেটার ব্যবহার করবে কিনা তা নিয়ে কোনও প্রভাব রয়েছে। একাধিক রিটার্ন মানগুলির ক্ষেত্রে এটি এমনকি পাল্টা-উত্পাদনশীলও হতে পারে, কারণ যুক্তিযুক্তভাবে কলার কেবল ফেরত মানগুলিই পাওয়া উচিত, যা পাবলিক গেটার্স এবং প্রাইভেট সেটটারদের (অপরিবর্তনীয়) পক্ষে পক্ষে যুক্তি দেয়। এটি কোনও (x, y) অবজেক্ট থেকে পোলার স্থানাঙ্ক ফেরত দেওয়ার ক্ষেত্রেও সত্য হতে পারে - পোলার কর্ডের পৃথক উপাদানগুলিতে পরিবর্তনগুলি (x, y) এ রূপান্তরিত হওয়ায় একক গণিতের ত্রুটিগুলি বিবেচনা করুন।
টুলমেকারস্টেভ

@ স্পেসেন জ্যাসেট: তবে আমি আপনার নীতির সাথে একমত।
টুলমেকারস্টেভ

1
আপনার একটি বৈধ পয়েন্ট রয়েছে তবে আমি পিক্সেল জিনিসটিকে খারাপ উদাহরণ বলে মনে করি যেহেতু পিক্সেলটি উইন্ডোটির মধ্যে রয়েছে তা নিশ্চিত করা (কেবল একটি উদাহরণ) এমন কিছু যা কেউ করতে পারে এবং তা ছাড়া, কাউকে পিক্সেল সেট (-5, -5)নাও দেওয়া হতে পারে একটি ভাল ধারনা. :-)
Horsey

50

পরিবর্তনের উদ্বেগ মোকাবেলায় আপনি x এবং y কে চূড়ান্ত হিসাবে ঘোষণা করতে পারেন। উদাহরণ স্বরূপ:

class Data {
  public final int x;
  public final int y;
  public Data( int x, int y){
    this.x = x;
    this.y = y;
  }
}

কলিং কোড যা এই ক্ষেত্রগুলিতে লেখার চেষ্টা করে তা "ফিল্ড এক্স চূড়ান্ত ঘোষিত হয়; নির্ধারিত হতে পারে না" এর একটি সংকলন সময় ত্রুটি পেয়ে যাবে।

ক্লায়েন্ট কোডটির পরে আপনার পোস্টে বর্ণিত 'শর্ট হ্যান্ড' সুবিধা থাকতে পারে

public class DataTest {
    public DataTest() {
        Data data1 = new Data(1, 5);
        Data data2 = new Data(2, 4);
        System.out.println(f(data1));
        System.out.println(f(data2));
    }

    public int f(Data d) {
        return (3 * d.x) / d.y;
    }

    public static void main(String[] args) {
        DataTest dataTest = new DataTest();
    }
}

3
ধন্যবাদ - একটি উত্তর যা দরকারী এবং সংক্ষিপ্ত। ক্ষেত্রের সিনট্যাক্সের সুবিধা কীভাবে পাবেন তা দেখায়, যখন পরিবর্তনীয়তা চান না।
টুলমেকারস্টেভ

@ টুলমেকারস্টেভ - প্রতিক্রিয়াটির জন্য ধন্যবাদ - অনেক প্রশংসা
ব্রায়ান

আমি চূড়ান্ত ক্ষেত্রের সাথে চূড়ান্ত ক্ষেত্রগুলি স্ট্রাক্ট "উদাহরণ" হিসাবে ব্যবহারের চূড়ান্ত উদাহরণগুলি ব্যবহার করার চেষ্টা করেছি, তবে caseএইরকম উদাহরণ ক্ষেত্র উল্লেখ করে একটি অভিব্যক্তি হিসাবে আমি পেয়েছি Case expressions must be constant expressions। এই কাছাকাছি উপায় কি? এখানে মূর্তিমান ধারণা কি?
n611x007

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

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

11

publicক্ষেত্র ব্যবহার করবেন না

publicআপনি যখন সত্যই কোনও শ্রেণীর অভ্যন্তরীণ আচরণটি মোড়াতে চান ক্ষেত্রগুলি ব্যবহার করবেন না । java.io.BufferedReaderউদাহরণস্বরূপ নিন । এটির নিম্নলিখিত ক্ষেত্র রয়েছে:

private boolean skipLF = false; // If the next character is a line feed, skip it

skipLFসমস্ত পড়ার পদ্ধতিতে পড়া এবং লিখিত হয়। যদি কোনও বাহ্যিক শ্রেণি পৃথক থ্রেডে চলতে থাকে তবে skipLFসে পড়ার মাঝামাঝি জায়গায় দূষিতভাবে রাষ্ট্রের সংশোধন করে ? BufferedReaderস্পষ্টভাবে haywire যেতে হবে।

publicক্ষেত্র ব্যবহার করুন

Pointউদাহরণস্বরূপ এই ক্লাসটি নিন :

class Point {
    private double x;
    private double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return this.x;
    }

    public double getY() {
        return this.y;
    }

    public void setX(double x) {
        this.x = x;
    }

    public void setY(double y) {
        this.y = y;
    }
}

এটি লিখতে খুব বেদনাদায়ক দুটি পয়েন্টের মধ্যকার দূরত্ব গণনা করবে।

Point a = new Point(5.0, 4.0);
Point b = new Point(4.0, 9.0);
double distance = Math.sqrt(Math.pow(b.getX() - a.getX(), 2) + Math.pow(b.getY() - a.getY(), 2));

ক্লাসের সরল গেটার এবং সেটটার ব্যতীত অন্য কোনও আচরণ নেই। এটা পাবলিক ক্ষেত্র ব্যবহার করতে গ্রহণযোগ্য যখন বর্গ শুধু একটি ডাটা স্ট্রাকচার প্রতিনিধিত্ব করে আর নেই, নেই এবং কখনো আচরণ (পাতলা getters এবং setters হয় থাকবে না এখানে আচরণ বিবেচিত)। এটি আরও ভালভাবে এভাবে লেখা যায়:

class Point {
    public double x;
    public double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
}

Point a = new Point(5.0, 4.0);
Point b = new Point(4.0, 9.0);
double distance = Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));

ক্লিন!

তবে মনে রাখবেন: কেবল আপনার শ্রেণীর আচরণের অনুপস্থিত থাকতে হবে তা নয়, ভবিষ্যতেও এর আচরণ করার কোনও কারণ নেই have


(এই ঠিক কি এই উত্তরটি বর্ণনা উদ্ধৃত করার জন্য। "জাভা ভাষা প্রোগ্রামিং জন্য কোড কনভেনশন: 10. প্রোগ্রামিং অভ্যাস" :

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

সুতরাং সরকারী নথিও এই অনুশীলন গ্রহণ করে।)


এছাড়াও, যদি আপনি অতিরিক্ত নিশ্চিত হন যে উপরের Pointশ্রেণির সদস্যগুলি পরিবর্তনযোগ্য হতে পারে, তবে আপনি finalএটি প্রয়োগের জন্য কীওয়ার্ড যুক্ত করতে পারেন:

public final double x;
public final double y;

8

যাইহোক, আপনি যে কাঠামোটিকে উদাহরণ হিসাবে দিচ্ছেন সেটি ইতিমধ্যে জাভা বেস বর্গ লাইব্রেরিতে বিদ্যমান রয়েছে java.awt.Point। এর সর্বজনীন ক্ষেত্র হিসাবে x এবং y রয়েছে, এটি নিজের জন্য দেখুন

আপনি যদি জানেন যে আপনি কী করছেন এবং আপনার দলের অন্যরাও এটি সম্পর্কে জানেন তবে সর্বজনীন ক্ষেত্রগুলি রাখা ভাল। তবে আপনার এটির উপর নির্ভর করা উচিত নয় কারণ তারা বিকাশকারীদের সাথে সম্পর্কিত বাগগুলিতে যেমন মাথাব্যাথা সৃষ্টি করতে পারে যেমন তারা বরাদ্দ স্ট্রাকগুলি স্ট্রোক করে (জাভা বস্তু সর্বদা রেফারেন্স হিসাবে পদ্ধতিতে প্রেরণ করা হয় অনুলিপি হিসাবে নয়)।


+1 কোনও সমস্যার উত্তম উল্লেখ - এমন একটি উপায় যাতে ফলাফল এখনও কোনও সি স্ট্রাক্টের মতো হয় না। যাইহোক, আপনি যে বিষয়টি জাভা অবজেক্টগুলি সম্পর্কে সর্বদা রেফারেন্স হিসাবে উত্থাপন করেন তা কোনও পাবলিক লিখনযোগ্য ক্ষেত্র না থাকার পরিবর্তে সেটার তৈরি করে উন্নত হয় না (এটি ওপির প্রশ্নের সারমর্ম - যা ব্যবহারের প্রতিনিধিত্ব)। বরং এটি প্রয়োজনের পক্ষে পক্ষে যুক্তি in এটি ক্ষুদ্রতার পক্ষে যুক্তি। যা হয় হয় public finalফিল্ড হিসাবে করা যেতে পারে , ব্রায়ানের জবাব অনুসারে, বা পাবলিক গেটর রেখে, তবে কোনও পাবলিক স্টেটর নেই। অর্থাত্, কেউ ক্ষেত্র বা অ্যাকসেসর ব্যবহার করে তা অনিবার্য।
টুলমেকারস্টেভ

8

উত্তর: আকু, ইজ, বি জন টপেলি ...

পরিবর্তনীয় সমস্যার জন্য নজর রাখুন ...

গেটার / সেটারগুলি বাদ দেওয়া বোধগম্য মনে হতে পারে। এটি আসলে কিছু ক্ষেত্রে ঠিক হতে পারে। এখানে প্রদর্শিত প্রস্তাবিত প্যাটার্নের সাথে আসল সমস্যাটি হ'ল পরিবর্তনের।

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

এটি খারাপ হয়ে যায় যখন সেই বস্তুটি অন্যের অভ্যন্তরীণ অবস্থার একটি গুরুত্বপূর্ণ অঙ্গ হয়, আপনি কেবল অভ্যন্তরীণ বাস্তবায়ন প্রকাশ করেছেন। এটি প্রতিরোধ করতে পরিবর্তে অবজেক্টের একটি অনুলিপি ফিরে আসতে হবে। এটি কাজ করে, তবে তৈরি টন একক-ব্যবহারের অনুলিপি থেকে প্রচুর জিসি চাপ সৃষ্টি করতে পারে।

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

দেখুন: জোশুয়া ব্লচ দ্বারা " কার্যকর জাভা " - আইটেম # 13: অপরিবর্তনীয়তা পছন্দ করুন।

পিএস: এও মনে রাখবেন, এই দিনগুলিতে সমস্ত জেভিএমগুলি সম্ভব হলে getMithod কে অপ্টিমাইজ করবে, ফলস্বরূপ কেবল একটি একক ক্ষেত্র-পঠনের নির্দেশনা।


12
একজন গেটার / সেটার কীভাবে এই সমস্যাটিকে সমাধান করে। আপনার এখনও একটি রেফারেন্স রয়েছে, ক্রিয়াকলাপগুলির সাথে আপনার কোনও সিঙ্ক্রোনাইজেশন নেই। আগত / সেটাররা নিজের মধ্যে এবং সুরক্ষা সরবরাহ করে না।
he_the_great

1
প্রযোজক এবং সেটটারগুলি প্রয়োজন হলে সিঙ্ক্রোনাইজেশন সরবরাহ করতে পারে। আপনি প্রত্যাশা করছেন যে গেটার্স এবং সেটার তাদের নির্দিষ্ট করে দেওয়া হয়েছে তার থেকে অনেক বেশি কাজ করবে। এগুলি নির্বিশেষে সিঙ্ক্রোনাইজেশনের সমস্যাটি এখনও থেকে যায়।
ব্যবহারকারী 924272

7

আমি কয়েকটি প্রকল্পে এটি চেষ্টা করেছি, যে তত্ত্বের ভিত্তিতে গ্রাহকরা এবং সেটটাররা শব্দার্থবিহীন অর্থহীন ক্রাফট দিয়ে কোডটিকে বিশৃঙ্খলা করে এবং অন্য ভাষাগুলি কনভেনশন-ভিত্তিক ডেটা-আড়াল বা দায়িত্ব বিভাজন (যেমন পাইথন) দিয়ে ঠিকঠাক কাজ করে বলে মনে হয়।

অন্যরা যেমন উপরে উল্লিখিত আছে, সেখানে 2 টি সমস্যা রয়েছে যা আপনি চালিয়ে গেছেন এবং সেগুলি সত্যিই স্থিরযোগ্য নয়:

  • জাভা বিশ্বের যেকোন স্বয়ংক্রিয় সরঞ্জাম সম্পর্কে গিটার / সেটার কনভেনশনের উপর নির্ভর করে। অন্যদের দ্বারা যেমন উল্লেখ করা হয়েছে, জেএসপি ট্যাগ, বসন্তের কনফিগারেশন, গ্রহন সরঞ্জাম ইত্যাদি ইত্যাদি ... আপনার সরঞ্জামগুলি যা প্রত্যাশা করে তার বিরুদ্ধে লড়াই করা গুগলের মাধ্যমে লম্বা সেশনের ট্রলিংয়ের একটি রেসিপি যা সেই অ-মানক উপায়টি শুরু করার চেষ্টা করে না trying বসন্ত মটরশুটি সত্যিই কষ্টের মূল্য নেই।
  • একবার আপনার মার্জিতভাবে শত শত পাবলিক ভেরিয়েবলের সাথে আপনার কোডড অ্যাপ্লিকেশন হয়ে গেলে আপনি সম্ভবত কমপক্ষে একটি পরিস্থিতি পাবেন যেখানে তারা অপর্যাপ্ত- যেখানে আপনার একেবারে অপরিবর্তনীয়তা প্রয়োজন, অথবা ভেরিয়েবল সেট হয়ে গেলে আপনার কোনও ইভেন্ট ট্রিগার করতে হবে, বা আপনি নিক্ষেপ করতে চান পরিবর্তনশীল পরিবর্তনের ক্ষেত্রে ব্যতিক্রম কারণ এটি কোনও অবজেক্টের অবস্থাটিকে অপ্রীতিকর কিছুতে সেট করে। তারপরে আপনি আপনার কোডটিকে কিছু বিশেষ পদ্ধতির সাথে বিশৃঙ্খলাবদ্ধভাবে যে কোনও স্থানে সরাসরি ভেরিয়েবলটি রেফারেন্স করার সাথে অবিচ্ছিন্ন পছন্দগুলির সাথে আটকে আছেন, আপনার অ্যাপ্লিকেশনটিতে 1000 ভেরিয়েবলের মধ্যে 3 এর জন্য কিছু বিশেষ অ্যাক্সেস ফর্ম রয়েছে।

এবং এটি একটি স্বয়ংসম্পূর্ণ বেসরকারী প্রকল্পে সম্পূর্ণরূপে কাজ করার সর্বোত্তম মামলায়। একবার আপনি সর্বজনীনভাবে অ্যাক্সেসযোগ্য লাইব্রেরিতে পুরো জিনিসটি রফতানি করলে এই সমস্যাগুলি আরও বড় হয়ে উঠবে।

জাভা খুব ভার্বোজ এবং এটি করার জন্য একটি লোভনীয় জিনিস। এটা করবেন না।


সরকারী ক্ষেত্রগুলির রাস্তায় নামার সমস্যাগুলির বিষয়ে দুর্দান্ত আলোচনা। জাভার একটি নির্দিষ্ট ঘাটতি, যা আমাকে বিরক্ত করে যখন আমাকে সি # থেকে জাভাতে ফিরে যেতে হবে (যা এখানে জাভার অসুবিধা থেকে শিখেছিল)।
টুলমেকারস্টেভ

4

যদি জাভা উপায়টি ওও উপায় হয়, তবে হ্যাঁ, সর্বজনীন ক্ষেত্রের সাথে একটি শ্রেণি তৈরি করা তথ্য গোপনের নীতিগুলি ভেঙে দেয় যা বলে যে কোনও বস্তুর নিজস্ব অভ্যন্তরীণ অবস্থা পরিচালনা করা উচিত। (সুতরাং আমি কেবল আপনার দিকে ঝাঁকুনি দিচ্ছি না, তথ্যের আড়াল করার একটি সুবিধা হ'ল কোনও শ্রেণীর অভ্যন্তরীণ কাজ একটি ইন্টারফেসের পিছনে লুকিয়ে রয়েছে - বলুন যে আপনি যে পদ্ধতিটি দ্বারা আপনার স্ট্রাক্ট শ্রেণি তার ক্ষেত্রগুলির একটি সংরক্ষণ করেছিল তা পরিবর্তন করতে চেয়েছিলেন, আপনাকে সম্ভবত ফিরে যেতে হবে এবং ক্লাসটি ব্যবহার করে এমন কোনও ক্লাস পরিবর্তন করতে হবে ...)

আপনি জাভাবিয়ান নামকরণের অনুবর্তী ক্লাসগুলির জন্য সমর্থনটিও নিতে পারবেন না, যা আপনি জাভা সার্ভার পৃষ্ঠায় ক্লাসটি এক্সপ্রেশন ল্যাঙ্গুয়েজ ব্যবহার করে লেখার সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নিলে ক্ষতিগ্রস্থ হবে।

জাভাওয়ার্ল্ড নিবন্ধ কেন গেটর এবং সেটার পদ্ধতিগুলি দুষ্কৃত হয় সেগুলি কখন অ্যাক্সেসর এবং মিউটর পদ্ধতি বাস্তবায়ন করবেন না সে সম্পর্কে চিন্তাভাবনা করতে আগ্রহী হতে পারে।

আপনি যদি একটি ছোট সমাধান লিখছেন এবং এতে জড়িত কোডের পরিমাণ হ্রাস করতে চান তবে জাভা উপায়টি সঠিক উপায় নাও হতে পারে - আমার ধারণা এটি সর্বদা আপনার এবং আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার উপর নির্ভর করে।


1
"কেন গেটর এবং সেটার পদ্ধতিগুলি খারাপ" "নিবন্ধের লিঙ্কের জন্য +1। তবে, আপনার উত্তরটি আরও পরিষ্কার হবে যদি আপনি উল্লেখ করেন যে দুটি পাবলিক ফিল্ড এবং পাবলিক গেটার / সেটটারগুলি জাভা উপায়ের মতো নয়: that নিবন্ধে যেমন ব্যাখ্যা করা হয়েছে - যখন সম্ভব হবে তখনও তা করবেন না। পরিবর্তে, ক্লায়েন্টদের উদাহরণের অভ্যন্তরীণ উপস্থাপনা মিরর করার পরিবর্তে তাদের কী করা উচিত তা নির্দিষ্ট পদ্ধতি সরবরাহ করুন। তবুও, এটি জিজ্ঞাসা করা প্রশ্নটির (যেটি ব্যবহার করতে হবে, সহজ "কাঠামোগত" ক্ষেত্রে) সত্যই সমাধান করে না, যা বিকাশকারী, আইএসবি এবং ব্রায়ান দ্বারা আরও ভাল উত্তর দেওয়া হয়েছে।
টুলমেকারস্টেভ

3

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


আনারস আমাকে হাসায় :)
গিলিয়াম

যাইহোক, এই উত্তরটি কী পার্থক্য তা সম্পর্কে কিছুই বলেনি। দক্ষ নয় এমন বিকাশকারীদের উপর র‌্যাগিং সেই বিকাশকারীদের কখন স্ট্রাক্ট তৈরি করতে হয় এবং কখন ক্লাস করা যায় তা জানতে সহায়তা করে না।
টুলমেকারস্টেভ

পার্থক্য সম্পর্কে এটি কিছুই বলে না কারণ তারা লেখক এই পার্থক্য সম্পর্কে সচেতন (তিনি জানেন স্ট্রাক্টের মতো সত্তা কী)। লেখক জিজ্ঞাসা করছেন যে স্ট্রোকগুলি কোনও ওও ভাষায় ব্যবহার করা উপযুক্ত কিনা এবং আমি হ্যাঁ বলি (সমস্যার ডোমেনের উপর নির্ভর করে)) যদি প্রশ্নটি কোন বস্তুকে সত্যিকারের ডোমেন অবজেক্ট করে তোলে তবে আপনার নিজের পায়ে দাঁড়াতে হবে যুক্তি.
luis.espinal

তদুপরি, একমাত্র প্রকার প্রশিক্ষণপ্রাপ্ত বিকাশকারী যে পার্থক্যটি জানতে পারে না সেগুলি এখনও স্কুলে রয়েছে। এটি অত্যন্ত মৌলিক, যেমন একটি লিঙ্কযুক্ত তালিকা এবং হ্যাশ টেবিলের মধ্যে পার্থক্য জানার মতো। যদি কোনও ব্যক্তি সত্যিকারের অবজেক্টটি কী তা না জেনে 4 বছরের সফটওয়্যার ডিগ্রি নিয়ে স্নাতক হয়, তবে হয় সেই ব্যক্তি এই ক্যারিয়ারের জন্য কাটেনি, বা তাকে স্কুলে ফিরে গিয়ে ফেরতের দাবিতে হবে। আমি সিরিয়াস।
luis.espinal

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

2

কারখানার পদ্ধতির পরিবর্তে নতুন ব্যবহারের মতো পাবলিক ফিল্ড অ্যাক্সেস ব্যবহারের সমস্যাটি - আপনি যদি পরে নিজের মত পরিবর্তন করেন তবে সমস্ত বিদ্যমান কলার নষ্ট হয়ে গেছে। সুতরাং, একটি এপিআই বিবর্তন দৃষ্টিকোণ থেকে, বুলেট কামড়ানোর জন্য এবং গেটর / সেটারগুলি ব্যবহার করা সাধারণত ভাল ধারণা।

আপনি যেখানে ক্লাসে অ্যাক্সেসকে দৃ strongly়ভাবে নিয়ন্ত্রণ করেন, সেই জায়গার যেখানে আমি অন্য পথে যাই is এই ক্ষেত্রে ক্ষেত্রের অ্যাক্সেস ব্যবহার করা আরও পরিষ্কার হতে পারে।

যাইহোক, ই-বারটেকের দাবিতে, জাভা in-তে সম্পত্তি সমর্থন যুক্ত হওয়ার সম্ভাবনা খুব কমই IM


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

2
আপনি অবশ্যই ধরে নিয়েছেন যে সমস্ত ব্যবহারকারী আপনার কোড বেসে আছেন তবে অবশ্যই এটি সত্য নয়। প্রায়শই বিভিন্ন অ-প্রযুক্তিগত কারণে কোডটি পরিবর্তন করা সম্ভব হয় না যা আপনার নিজস্ব কোড বেসে থাকতে পারে।
অ্যালেক্স মিলার

2

আমার কোডটি সহজ করার জন্য ব্যক্তিগত অভ্যন্তরীণ ক্লাসগুলি তৈরি করার সময় আমি প্রায়শই এই প্যাটার্নটি ব্যবহার করি, তবে আমি এই জাতীয় অবজেক্টগুলিকে পাবলিক এপিআইতে প্রকাশ করার পরামর্শ দেব না। সাধারণভাবে, আপনি আপনার পাবলিক এপিআই-তে যত ঘন ঘন অবজেক্টগুলিকে অপরিবর্তনীয় করে তুলতে পারেন তত ভাল, এবং আপনার 'স্ট্রাক্টের মতো' অবজেক্টটি কোনও অপরিবর্তনীয় ফ্যাশনে তৈরি করা সম্ভব নয়।

একটি সরু হিসাবে, এমনকি যদি আমি এই অবজেক্টটি একটি ব্যক্তিগত অভ্যন্তর শ্রেণি হিসাবে লিখছিলাম তবে আমি এখনও অবজেক্টটি আরম্ভ করার জন্য কোডটি সহজ করার জন্য একটি কনস্ট্রাক্টর সরবরাহ করব। যখন কেউ করবে তখন ব্যবহারযোগ্য অবজেক্টটি পেতে কোডের 3 লাইন থাকা কেবল অগোছালো।


2

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

stream.mapToInt(SomeData1::x)

আইনী নয়, তবে

stream.mapToInt(SomeData2::getX)

হয়।


এই ক্ষেত্রে আপনি ব্যবহার করতে পারেন data -> data.x, যা এখনও যুক্তিসঙ্গত
জেমস ক্রাউস

1

আমি ক্ষতি দেখতে পাচ্ছি না আপনি যদি জানেন যে এটি সর্বদা একটি সাধারণ কাঠামো হতে চলেছে এবং আপনি এর সাথে আচরণটি কখনও সংযুক্ত করতে চান না।


1

এটি জাভা ভাষা নয়, অবজেক্ট ওরিয়েন্টেড ডিজাইনের একটি প্রশ্ন। ক্লাসের মধ্যে ডেটা ধরণের আড়াল করা এবং শ্রেণীর এপিআইয়ের অংশবিশেষে কেবল এমন পদ্ধতিগুলিই প্রকাশ করা ভাল It's আপনি যদি অভ্যন্তরীণ ডেটা প্রকারগুলি প্রকাশ করেন তবে ভবিষ্যতে আপনি সেগুলি কখনই পরিবর্তন করতে পারবেন না। আপনি যদি এগুলি গোপন করেন তবে ব্যবহারকারীর কাছে আপনার একমাত্র বাধ্যবাধকতা হল পদ্ধতিটির ফিরে আসা এবং যুক্তির ধরণ।


1

এখানে আমি 5 জন ভিন্ন ব্যক্তির নাম এবং বয়স ইনপুট করার জন্য একটি প্রোগ্রাম তৈরি করি এবং একটি নির্বাচনের বাছাই (বয়স অনুসারে) সম্পাদন করি। আমি একটি ক্লাস ব্যবহার করেছি যা কাঠামো হিসাবে কাজ করে (সি প্রোগ্রামিং ভাষার মতো) এবং সম্পূর্ণ ক্রিয়াকলাপ সম্পাদনের জন্য একটি প্রধান শ্রেণি। এখানে আমি কোড সরবরাহ করছি ...

import java.io.*;

class NameList {
    String name;
    int age;
}

class StructNameAge {
    public static void main(String [] args) throws IOException {

        NameList nl[]=new NameList[5]; // Create new radix of the structure NameList into 'nl' object
        NameList temp=new NameList(); // Create a temporary object of the structure

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        /* Enter data into each radix of 'nl' object */

        for(int i=0; i<5; i++) {
            nl[i]=new NameList(); // Assign the structure into each radix

            System.out.print("Name: ");
            nl[i].name=br.readLine();

            System.out.print("Age: ");
            nl[i].age=Integer.parseInt(br.readLine());

            System.out.println();
        }

        /* Perform the sort (Selection Sort Method) */

        for(int i=0; i<4; i++) {
            for(int j=i+1; j<5; j++) {
                if(nl[i].age>nl[j].age) {
                    temp=nl[i];
                    nl[i]=nl[j];
                    nl[j]=temp;
                }
            }
        }

        /* Print each radix stored in 'nl' object */

        for(int i=0; i<5; i++)
            System.out.println(nl[i].name+" ("+nl[i].age+")");
    }
}

উপরের কোডটি ত্রুটি মুক্ত এবং পরীক্ষিত ... এটি কেবল আপনার আইডিইতে অনুলিপি করুন এবং পেস্ট করুন এবং আপনি জানেন এবং কি ??? :)


0

আপনি সরকারী ক্ষেত্রগুলি এবং জাভাতে কোনও পদ্ধতি সহ একটি সাধারণ শ্রেণি তৈরি করতে পারেন তবে এটি এখনও একটি শ্রেণি এবং এখনও বাক্যবৈজ্ঞানিকভাবে এবং ক্লাসের মতো মেমরি বরাদ্দের ক্ষেত্রে পরিচালনা করা হয়। জাভাতে সত্যিকারের পুনরুত্পাদন করার কোনও উপায় নেই।


0

আমি যখন কোনও পদ্ধতি থেকে একাধিক মান ফেরত দিতে পারি তখন আমি এই জাতীয় ক্লাসটি ব্যবহার করি। অবশ্যই, এই জাতীয় বস্তু স্বল্পস্থায়ী এবং খুব সীমিত দৃশ্যমান সহ, তাই এটি ঠিক হওয়া উচিত।


0

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


0

দিক-ভিত্তিক প্রোগ্রামিং আপনাকে অ্যাসাইনমেন্ট বা ফেচগুলি ফাঁদে ফেলতে এবং তাদের সাথে বিরতি যুক্তি যুক্ত করতে দেয়, যা আমি প্রস্তাব করি সমস্যা সমাধানের সঠিক উপায়। (তাদের প্রকাশ্য বা সুরক্ষিত হওয়া উচিত বা প্যাকেজ-সুরক্ষিত হওয়া উচিত তা অরথোগোনাল))

সুতরাং আপনি সঠিক অ্যাক্সেস যোগ্যতা অর্জনকারী সাথে নিরবিচ্ছিন্ন ক্ষেত্রগুলি দিয়ে শুরু করুন। আপনার প্রোগ্রামের প্রয়োজনীয়তাগুলি বাড়ার সাথে সাথে আপনি যুক্তি যুক্ত করতে পারেন সম্ভবত বৈধতা দেওয়ার জন্য, অবজেক্টটির ফেরত দেওয়া একটি অনুলিপি তৈরি করুন etc.

গেটর / সেটার দর্শন বিপুল সংখ্যক সরল কেসের জন্য যেখানে তাদের প্রয়োজন হয় না তার জন্য ব্যয় চাপায়।

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

আইডিই ইস্যু একটি লাল-হারিং। এটি পাঠ্য এবং চাক্ষুষ দূষণ যা গেট / সেট থেকে উদ্ভূত তা টাইপিং তেমন নয়।

টীকাগুলি প্রথম দর্শনে দৃষ্টিভঙ্গি প্রোগ্রামিংয়ের অনুরূপ বলে মনে হয় তবে এ্যাসপেক্টজে সংক্ষিপ্ত ওয়াইল্ড-কার্ডের মতো পয়েন্টকুট স্পেসিফিকেশনের বিপরীতে এ্যানোটেশনগুলি সংযুক্ত করে আপনাকে পয়েন্টকাটগুলি সম্পূর্ণরূপে গণনা করতে হবে।

আমি আশা করি অ্যাস্পেক্টজে সম্পর্কে সচেতনতা মানুষকে গতিময় ভাষায় অকাল বসতি থেকে বিরত রাখে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.