"জাভা ওওপি" এবং "পাইথোনিক ওওপি" এর মধ্যে পার্থক্য? [বন্ধ]


19

আমি অ্যাকশনস্ক্রিপ্ট 2.0 দিয়ে শুরু করেছি এবং তারপরে জাভা দিয়ে চলেছি। আমি তখন থেকে পাইথন (সম্ভবত আমার প্রিয়) সহ একগুচ্ছ ভাষা শিখেছি বা কমপক্ষে ব্যবহার করেছি।

আমি আশঙ্কা করছি যে আমার অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের স্টাইলটি অত্যন্ত অযৌক্তিক এবং আরও পাইথন সিনট্যাক্স সহ জাভা ওওপি-র মতো। কী জাভা পছন্দ করে এবং পাইথোনিক OOP একে অপরের থেকে পৃথক করে? পাইথনে অবজেক্ট ওরিয়েন্টেড কোড লেখার সময় জাভা প্রোগ্রামাররা প্রায়শই কী "অযৌক্তিকভাবে" করেন?

উত্তর:


54

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

পাইথন লোকের জন্য জাভা হল একটি অরওলিয়ান মহাবিশ্ব যেখানে আপনি ক্রমাগত অন্য কারও কাছে ঝাঁকুনি দিয়ে দেখছেন যে মহাবিশ্ব কীভাবে টিক দেয়।

সত্য হ'ল এমন একটি যা আপনি অন্য ভাষায় ঠিক যেমন পরিষ্কারভাবে করতে পারেন একটি ভাষায় করতে পারেন। তবে আপনি যেমনটি উল্লেখ করেছেন যে পরিষ্কার করার অর্থ কী তা সম্পর্কে উভয় সম্প্রদায়ের মধ্যে গুরুত্বপূর্ণ পার্থক্য রয়েছে ।

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

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

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

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

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

পাইথনের সাথে কাজ করার প্রায় সবসময়ই দ্রুত এবং সহজ উপায় রয়েছে তবে সিস্টেম একবার নির্দিষ্ট দ্বারপ্রান্তে পৌঁছে গেলে জটিলতা পরীক্ষা করা আরও কঠিন হতে পারে।

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

অতএব উত্তপ্ত তর্কগুলি যেটি সবচেয়ে ভাল।


14

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

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

পদ্ধতির ওভারলোডগুলির পরিবর্তে আপনার ডিফল্ট ভেরিয়েবল রয়েছে। পরিবর্তনীয় অবজেক্টগুলিকে আপনার ডিফল্ট মান হিসাবে ব্যবহার করবেন না।

# bad
def fL(x=[])
  x.append(1)
  print x
# good
def fN(x=None)
  if (x is None):
    x = []
  x.append(1)
  print x

fL()
fL()
fN()
fN()

বর্গ এবং উদাহরণের ভেরিয়েবলগুলির মধ্যে পার্থক্যটি খুব সূক্ষ্ম হয় যখন আপনি প্রথম শুরু করবেন।

class Obj(object):
   thing = "class variable"
   def __init__(self):
      self.thing1 = "instance variable"
      print self.thing, self.thing1

আমি স্যুইচটি করার সময় এগুলি আমার ব্যবহার করতে হয়েছিল of


1
+1 কিছু জিনিসের ভাল সংক্ষিপ্তসার, যদিও আমি সেগুলি আগে থেকেই জানতাম
এন্টো

6

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

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

---- সম্পাদনা ----

@ ডেলান পেডেন্টালি হিসাবে দেখিয়েছেন যে, কার্নেল স্তরে পাইথন দ্বারা সংজ্ঞায়িত পাঁচটি যৌগিক ডেটা টাইপ রয়েছে (তালিকা, ডিক্ট, টিপল, সেট এবং ফ্রোজেনসেট, আমার "পাইথন ইন সংক্ষেপে" অনুলিপি অনুসারে)। এটি সত্য হলেও, আমি যে পয়েন্টটি তৈরির চেষ্টা করছি তার সাথে এটি আসলে প্রাসঙ্গিক নয়: পাইথন প্রয়োজনীয় ডেটা কাঠামো হিসাবে তালিকায় তালিকা তৈরি করে। হ্যাঁ, আপনি স্ট্যাক হিসাবে একটি তালিকা ব্যবহার করতে পারেন, তবে আপনি ঠিক একই তালিকাটি সারি হিসাবে ব্যবহার করতে পারেন । এবং তারপরে আবার একটি স্ট্যাক।

অন্যদিকে জাভাতে একটি কার্নেল ডেটা স্ট্রাকচার রয়েছে (অ্যারে, "জাভা পকেট গাইড) অনুসারে, তবে সাধারণ ব্যবহারে আপনি সংগ্রহগুলি আমদানি না করে জাভাতে বেশি কিছু করতে পারবেন না Once একবার এটি করার পরে আপনার অ্যাক্সেস হবে পাইথনের তালিকার সাথে আপনার একই কার্যকারিতাটি পেতে একটি 'ধনী' (যার অর্থ আমি অত্যন্ত জটিল) অর্থ পাঠাগারটিতে to

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

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

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

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


আমি মেটাচলাস ব্যতীত সকলের সাথে পরিচিত, সেগুলি সন্ধান করব। ধন্যবাদ :)
এন্টো

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

আমি দুঃখিত, এটি ঠিক সত্য নয়। পাইথনের হুবহু দুটি ডেটা স্ট্রাকচার রয়েছে: তালিকা এবং শব্দকোষ। কিছু পাইথন লাইব্রেরিগুলি এই মূল কাঠামোগুলিকে প্রসারিত করতে পারে তবে ভাষাটি তাদের বলার মতো নয়।
ফিলোসোডাড

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

1
এখন মনে হয় আমি বিন্দু আপনি করতে চেষ্টা বুঝতে (এবং আমার downvote মুছে - যা আমি প্রথম স্থানে যোগ কারণ যে অংশ প্লেইন ছিল ভুল উপায় এটা মূলত বিবৃত হয়)। আমি এখনও মনে করি আপনাকে কমপক্ষে দুটি ডেটা স্ট্রাকচার বিবেচনা করতে হবে (প্রায়-সর্বজনীন ক্রম হিসাবে তালিকাবদ্ধ করা এবং প্রায়-সর্বজনীন ম্যাপিং হিসাবে ডিক্টস)। এবং এটি বিভিন্ন পুনরাবৃত্তকারী এবং জেনারেটরগুলির উল্লেখ করার দরকার নেই, যা আমি কমপক্ষে (এবং সম্ভবত আরও বেশি) তালিকা হিসাবে ব্যবহার করি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.