অ্যারে বা বস্তুর অ্যারে অবজেক্ট?


13

আমি ম্যানেজমেন্ট সিম গেম তৈরি করছি, রোলার কোস্টার টাইকুনের লাইনে কিছু something আমি জানতে চাই যে আমার বিশ্বজগতের কাঠামোগত করার সর্বোত্তম উপায়টি কী তাই সর্বাধিক কর্মক্ষমতা।

ধরা যাক আমার গেমটিতে আমার 5,000 জন লোক আছে আমি পারলাম:

একটি অবজেক্ট তৈরি করুন এবং সেগুলি তাদের মতো একটি অ্যারেতে সংরক্ষণ করুন;

class person() {
    this.x = 0;
    this.y = 0;
    this.thirst = 15;
    this.hunger = 15;
    // etc.. add methods:
    public findPath(int destX, int destY) {
    // and so on
    }

    people = new person[5000];

for (int = 0; i < 5000; i++) {
    people[i] = new person;
    }

বা আমার এমন লোকদের এমন কোনও বস্তু তৈরি করা উচিত যাতে এতে অনেকগুলি বাইট অ্যারে থাকে যা এই জাতীয় ব্যক্তির বৈশিষ্ট্য উপস্থাপন করে:

class people() {
    this.hunger = new byte[5000]
    this.thirst = new byte[5000]

    getThirst(int i) {
        return this.thirst[i]
        }

 // and so on....

নাকি আমি পুরোপুরি ছাপ ফেলেছি?


অত্যন্ত আকর্ষণীয় প্রশ্ন, বিশেষত ২০১৩ সাল থেকে, আরসিটি প্রকাশের এক ডজন বছর পরে, একটি বিশ্বে 5000 টি দৃশ্যমান, স্বতন্ত্র এনপিসি থাকার ধারণাটি সম্পূর্ণ অসম্ভব (প্রযুক্তিতে অগ্রগতি সত্ত্বেও) প্রদর্শিত হবে
কাতানা 314

উত্তর:


15

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

সাধারণত, এওএসের পদ্ধতিটি দ্রুততর, যদি যথাযথভাবে ব্যবহৃত হয় তবে এসওএ এর সাথে কাজ করা সহজতর হয় (এবং তাই আরও গুরুত্বপূর্ণ মানের - উন্নয়নের সময়টির জন্য অনুকূল হয়ে যায়)।

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

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


1
আপনার তৃতীয় অনুচ্ছেদে আপনি কি এওএস-কে দুবার উল্লেখ করবেন? মন্তব্যগুলি পরস্পরবিরোধী বলে মনে হচ্ছে ...
ali_goes_oosh

দুঃখিত, এটি স্থির করে দিন
শান মিডলডিচ

4

একটি ইন্টারফেস থেকে অন্য অন্তর্নিহিত উপস্থাপনায় অনুবাদ করার জন্য ফ্যাসাদ প্যাটার্নটি ব্যবহার করে আপনার উভয়ই থাকতে পারে না এমন কোনও কারণ নেই । উদাহরণস্বরূপ, শানের এসওএ / এওএস শর্তাদি ব্যবহার করে:

এসওএ মুখোমুখি

class PeopleFacade {
    Person persons[5000];
    getThirst(int i) { return persons[i].thirst; }
}

এওএস মুখোমুখি

class People { int thirsts[5000]; } people;
class PersonFacade {
    int i;
    getThirst() { return people.thirsts[i]; }
}

আপনি বিকাশকারী ইন্টারফেস হিসাবে, যে দক্ষতা / ক্যাশের কারণ সহ যে কোনও কারণেই বাস্তবায়ন হিসাবে সবচেয়ে ভাল যাই হোক না কেন বনাম ইন্টারফেস হিসাবে স্বাচ্ছন্দ্যপূর্ণ ফর্মের মধ্যে আপনি অবাধে চয়ন করতে পারেন

মুখোশের আরেকটি সুবিধা হ'ল এটি ফ্লাইওয়েট প্যাটার্নে খুব স্বাভাবিকভাবেই যায় , যেখানে আপনি আসলে স্মৃতিশক্তির চেয়ে অনেক বেশি ব্যক্তির প্রতিনিধিত্ব করতে একটি ইন্টারফেস ব্যবহার করেন। উদাহরণস্বরূপ, সম্ভবত আপনার রোবোটিক পৃষ্ঠপোষকরা আছেন যা কখনও তৃষ্ণার্ত হয় না; তারপরে আপনি সেই বিশেষ কেসটি আপনার মধ্যে রাখতে পারেন PersonFacadeএবং সেই ইন্টারফেসের ব্যবহারকারীদের কখনই রোবট সম্পর্কে জানতে হবে না:

class People { int nonRobotThirsts[1000]; } people;
class PersonFacade {
    int i;
    bool isRobot;
    getThirst() {
        if (isRobot)
            return 0;
        else
            return people.nonRobotThirsts[i];
    }
}

... বা আরও ওও পদ্ধতির ব্যবহার করে আপনার একটি পৃথক Robotশ্রেণি থাকবে যা পুরোপুরি Personবাদে ঠিক মতো কাজ করে getThirst()


-1

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

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

আপনি কি কখনও মাল্টিথ্রেডিং করা উচিত - এবং 5000 ব্যবহারকারীর সাহায্যে আপনাকে এতে চাপ দেওয়া হতে পারে - আপনি প্রতিটি ব্যবহারকারীর জন্য পিতামাতার উদাহরণটি অনেক বেশি ব্যবহারিক ব্যবহারের জন্য পাবেন।

(এবং লোকজনের এই বিন্যাস: আপাতত এটির সাথে আটকে থাকুন তবে এক পর্যায়ে আপনি অন্যান্য স্টোরেজ ডিভাইসগুলি চাইবেন some কোনও ধরণের মানচিত্র যাতে আপনি নাম দিয়ে লোকগুলি খুঁজে পেতে পারেন And এবং বিভিন্ন কীগুলির সাথে বিভিন্ন তালিকা এবং সম্ভবত গুচ্ছের গুচ্ছ) অ্যারে বা লিঙ্কযুক্ত তালিকাগুলির জন্য প্রতিটি সংক্ষিপ্ত পর্যায়ে তালিকাবদ্ধ করে)

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