অবজেকটিভ-সি এর পদ্ধতি ওভারহেড একটি 'অনেকগুলি ছোট পদ্ধতি' ডিজাইনের পদ্ধতির অনিবার্য করে তোলে?


15

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

অকাল অপটিমাইজেশন উদ্বেগ সত্ত্বেও, আমি জানতে চাই যে Objective_ c যে কাজগুলি Obc_msgSend এর সাথে করে, সেগুলি ব্যবহারিক দিক দিয়ে 'বহু ক্ষুদ্র পদ্ধতি' অবজেক্ট-সি প্রকল্পগুলির জন্য অপ্রয়োজনীয় হওয়ার পক্ষে যথেষ্ট তাৎপর্যপূর্ণ কিনা।

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

শোধন

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

(এটির মূল্যের জন্য, আমি বর্তমানে অবজেক্টিভ-সি লিখছি এবং আমি ছোট পদ্ধতি ব্যবহার করছি)

আরও অনুরোধ

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


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

1
আপনি যদি ওভারহেড এড়াতে চান তবে সি ফাংশন ব্যবহার করুন।
ডানফোল্ড

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

কিছু ভাল উত্তরের জন্য SO- তে উদ্দেশ্য বার্তায় প্রেরণের বার্তা দেখুন ।
কালেব

আপনি কেন কেবল কোড কোডটি এক্সকোডে রাখেন না? আমি বুঝতে পারি যে আপনি বিমূর্তে জিজ্ঞাসা করছেন এবং নির্দিষ্ট কোড সম্পর্কে নয়, তবে যেহেতু আপনি স্পষ্টতই প্রচুর ছোট পদ্ধতিতে কিছু কোড পেয়েছেন তাই কেন এটি চালাবেন না এবং নিজের জন্য দেখুন?
কালেব

উত্তর:


4

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

তবে, যথারীতি আপনার মাইলেজটি আলাদা হতে পারে ...


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

@ ক্রিস: "আমি খুব বেশি উদ্দেশ্যমূলক-সি কোড দেখিনি যা সত্যিই ছোট পদ্ধতি অনুসরণ করে" -> কেবল কৌতূহল: আপনি কোডের কোন অঙ্গ থেকে এই সিদ্ধান্তে পৌঁছলেন? আমি এটিতে বিশ্বাস করি, তবে আমি আরও বিশ্বাস করি যে এটি মাইক্রো-অপ্টিমাইজেশন সচেতনতার কারণে নয়, তবে প্রোগ্রামারদের অনেকগুলিই ভাল নকশা এবং রক্ষণাবেক্ষণের টিনেটগুলিতে মনোনিবেশ করছেন না। এটিকে অন্যভাবে রাখলে, তাদের জাভা, সি #, রুবি বা যে কোনও কোড অবশ্যই একই অনুশীলনগুলি অনুসরণ করবে ...
জর্দো

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

2

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

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

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

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