অভিজ্ঞ সি ++ ইঞ্জিনিয়ারদের দলে OOP / OOD- কে "পরিচয় করিয়ে দেওয়ার" সেরা উপায়


17

আমি একটি কার্যকর উপায় খুঁজছি, এটিও অপমান হিসাবে আসে না, বিদ্যমান দলের সদস্যদের সাথে ওওপি ধারণাটি চালু করতে? আমার সতীর্থরা ওও ভাষাগুলিতে নতুন নয়। আমরা দীর্ঘদিন ধরে সি ++ / সি # করে যাচ্ছি তাই প্রযুক্তি নিজেই পরিচিত।

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

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

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

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

কোড পর্যালোচনা করার চেয়ে বিস্তৃত শ্রোতাদের কাছে পৌঁছানোর মতো আরও কোনও পদ্ধতি রয়েছে, তবে একই সাথে শাস্তির বক্তৃতাটিও মনে হবে না?

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

আপডেট: আমি একটি প্রযুক্তি নেতৃত্ব (এই ভূমিকায় 6 মাস) এবং গ্রুপ ম্যানেজারের পুরো সমর্থন রয়েছে। আমরা একটি খুব পরিপক্ক পণ্য নিয়ে কাজ করছি এবং রক্ষণাবেক্ষণের ব্যয়গুলি অবশ্যই তাদের জানাতে দেবে।



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

আমি এই পোস্টটি তৈরি করার পরে, সম্পর্কিত লিঙ্কযুক্ত পপ আপ হয়েছে যা আমার পরিস্থিতিটির মতো মনে হচ্ছে: প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জাওয়েজ / প্রশ্নগুলি / 43214/… । আমি ঠিক একই জিনিস সম্পর্কে উদ্বিগ্ন। সমস্যাটি হ'ল তাদের দলে ২ জন বিকাশকারী ছিল এবং আমি অবশ্যই কোড রিভিউ সহ এটি পরিচালনা করতে পারি। আমি এমন একটি পদ্ধতির সন্ধান করছি যা আমাদের টিমের আকারের সাথে কাজ করবে (10+) আমি কেবল প্রতিটি বিকাশকারীর সাথে যতটা চাই তার সাথে যোগাযোগ করতে পাই না।
ডিএক্সএম

উত্তর:


5

আপনি সলিড নীতিগুলিতে একটি সংক্ষিপ্ত প্রশিক্ষণ কেন বিকাশ করেন না এবং তাদের এই প্রশিক্ষণ দিন না কেন? এটি আমার বর্তমান প্রতিষ্ঠানে আমার পক্ষে বেশ ভাল কাজ করেছে বলে মনে হয় এবং আমি সংক্ষিপ্ত প্রশিক্ষণ দেওয়া আসলে মজাদার (জড়িত প্রত্যেকের জন্য)।

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

  1. এই রিফ্যাক্টরিংগুলি করা এতটা কঠিন নয়
  2. এটি বেশি সময় নেয় না
  3. শেষ ফলাফল (সাবধানে নির্বাচিত ;-)) মূল কোডের চেয়ে পরিষ্কারভাবে ভাল।

5

কোড পর্যালোচনাগুলি খুব সহায়ক হয়েছে তবে কোড পর্যালোচনাগুলির সাথে সমস্যাটি হ'ল এগুলি কেবল সত্যের পরে ঘটে।

একটি প্রকল্পে, আমরা নকশা পর্যালোচনা করেছি।

15 মিনিট. হোয়াইট বোর্ডে। কোডিংয়ের আগে ডিজাইনের মাধ্যমে কথা বলুন।

সর্বাধিক গুরুত্বপূর্ণ অংশটি কোনও বাস্তবায়ন কাজের আগে ডিজাইন পর্যালোচনার সময় নির্ধারণ করে ।

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

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


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

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

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

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

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

4

আমি ধরে নিচ্ছি যে আপনি কিছু বিকাশকারীদের চেয়ে কনিষ্ঠ, তবে খাদ্য শৃঙ্খলে বেশি।

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

পুরানো কোডটি সেই সময়ের হার্ডওয়ারে দ্রুত চালানোর জন্য অনুকূলিত হয়েছিল; অন্যান্য জিনিসের মধ্যে এর অর্থ উত্তরাধিকারের স্তর হ্রাস করা এবং ক্রিয়াকলাপ / পদ্ধতি এড়ানো থেকে তুচ্ছ কাজ করা উচিত।

সংকলকগণ বছরের পর বছরগুলিতে অনেক বেশি স্মার্ট হয়ে উঠেছে, তাই এখনকার সময়ে যা সত্য ছিল তা এখনকার মতো নয় - উদাহরণস্বরূপ, সংকলক একটি ছোট ফাংশনটি ইনলাইন করতে বেছে নিতে পারে।

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


0

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


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

আমি সম্মত যে "ফাংশনগুলির মধ্যে প্রতিটি সংযুক্তি অনিবার্য"। তবে ভাল নকশা প্রতিটি ফাংশন খুব মিলিত অন্যান্য ফাংশন সংখ্যা হ্রাস। (একটি ক্লাস কেবল এই শেষের এক মাধ্যম)
ইয়ান

0

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

অন্যদিকে, বিবেচনা করুন যে সি ++ কোনও খাঁটি ওও ভাষা নয়, নকশায় বা অনুশীলনেও নয়। পুরো কনস্ট্রাক্টর / মেমসেট স্টোরি শোনায় আপনার কাছে RAII প্রবর্তন করা উচিত, যা মোটেও OO কৌশল নয় তবে সি ++ এর সাথে নির্দিষ্ট (দুর্ভাগ্যক্রমে -। নেট এর আইডিজপোসে দেখায় যে RAII পরবর্তী চিন্তাভাবনার পরে কী ঘটে)। এখানে সম্পর্কিত বইগুলি হ'ল (আরও) কার্যকর সি ++ এবং (আরও) ব্যতিক্রমী সি ++।


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

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

@ ওল্ডপিক্স: ওপি বিপরীতে রয়েছে। তারা ওওপি / ওওডি জানে না। তারা পদ্ধতিগত পদ্ধতিতে ওওপি প্রোগ্রাম করছে। ডিজাইনের কৌশলগুলির সাথে তাদের পরিচয় করানোর জন্য তাদের কিছু দরকার এবং জিওএফ বইটি এই দৃশ্যের সাথে উপযুক্ত নয় ho
ফ্যালকন

আমি বাক্যগুলি উল্লেখ করছিলাম But every time I bring up OOP, everyone always nods and makes it seem like they know exactly what I'm talking aboutএবং My teammates are not new to OO languages, তবে আমি দেখতে পাচ্ছি কীভাবে এটি কিছুটা অস্পষ্ট কারণ তারা ওও সম্পর্কে জানার বিষয়ে মিথ্যা কথা বলতে পারে যখন ওপি তাদের সাথে কথা বলে।
ওয়াইল্ডপিক্স

1
@ এসএমএলটার্স - ডিজাইনের প্যাটার্নগুলির প্রিফেস: "এই বইটি অবজেক্ট ওরিয়েন্টেড প্রযুক্তি বা ডিজাইনের পরিচিতি নয় Many অনেক বই ইতিমধ্যে এটির একটি ভাল কাজ করেছে This এই বইগুলি ধরে নিয়েছে আপনি কমপক্ষে একটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজে যুক্তিসঙ্গত দক্ষ এবং আপনি অবজেক্ট অরিয়েন্টেড ডিজাইনেও কিছুটা অভিজ্ঞতা থাকতে হবে। " এই বইটি প্রয়োজনীয়তার সাথে খাপ খায় না। তাদের কিছু এন্ট্রি স্তরের OOD স্টাফ পড়া উচিত।
ফ্যালকন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.