2009-01-15 27 views
6

मुझे ऑब्जेक्ट और क्लास के बीच वैचारिक अंतर के आसपास अपना सिर प्राप्त करने में थोड़ी परेशानी हो रही है। मैं वास्तव में किसी भी प्रोग्रामिंग भाषा में दोनों के बीच भेद को समझ नहीं पा रहा हूं, लेकिन वर्तमान में मैं पर्ल और मूस के साथ काम कर रहा हूं, इसलिए मैं उन चीजों का उपयोग करके स्पष्टीकरण पसंद करूंगा।पर्ल में ऑब्जेक्ट और क्लास के बीच क्या अंतर है?

चीयर्स

उत्तर

20

बहुत सारे "एक वर्ग एक ब्लूप्रिंट है, एक ऑब्जेक्ट उस ब्लूप्रिंट से बनाया गया है", लेकिन चूंकि आपने मूस और पर्ल का उपयोग करके एक विशिष्ट उदाहरण मांगा है, मैंने सोचा कि मैं एक प्रदान करूंगा।

इस उदाहरण में, हमारे पास 'हैकर' नामक एक कक्षा होगी।वर्ग (एक खाका की तरह) बताता है कि हैकर्स कर रहे हैं (उनकी विशेषताओं) और जो उन्होंने (उनके तरीकों) कर सकते हैं:

package Hacker;  # Perl 5 spells 'class' as 'package' 

use Moose;   # Also enables strict and warnings; 

# Attributes in Moose are declared with 'has'. So a hacker 
# 'has' a given_name, a surname, a login name (which they can't change) 
# and a list of languages they know. 

has 'given_name'  => (is => 'rw', isa => 'Str'); 
has 'surname'   => (is => 'rw', isa => 'Str'); 
has 'login'   => (is => 'ro', isa => 'Str'); 
has 'languages'  => (is => 'rw', isa => 'ArrayRef[Str]'); 

# Methods are what a hacker can *do*, and are declared in basic Moose 
# with subroutine declarations. 

# As a simple method, hackers can return their full name when asked. 

sub full_name { 
    my ($self) = @_; # $self is my specific hacker. 

    # Attributes in Moose are automatically given 'accessor' methods, so 
    # it's easy to query what they are for a specific ($self) hacker. 

    return join(" ", $self->given_name, $self->surname); 
} 

# Hackers can also say hello. 

sub say_hello { 
    my ($self) = @_; 

    print "Hello, my name is ", $self->full_name, "\n"; 

    return; 
} 

# Hackers can say which languages they like best. 

sub praise_languages { 
    my ($self) = @_; 

    my $languages = $self->languages; 

    print "I enjoy programming in: @$languages\n"; 

    return; 
} 

1; # Perl likes files to end in a true value for historical reasons. 

अब है कि हम अपने हैकर वर्ग मिल गया है, हम हैकर कमाना शुरू कर सकते वस्तुओं:

#!/usr/bin/perl 
use strict; 
use warnings; 
use autodie; 

use Hacker; # Assuming the above is in Hacker.pm 

# $pjf is a Hacker object 

my $pjf = Hacker->new(
    given_name => "Paul", 
    surname => "Fenwick", 
    login  => "pjf", 
    languages => [ qw(Perl C JavaScript) ], 
); 

# So is $jarich 

my $jarich = Hacker->new(
    given_name => "Jacinta", 
    surname => "Richardson", 
    login  => "jarich", 
    languages => [ qw(Perl C Haskell) ], 
); 

# $pjf can introduce themselves. 

$pjf->say_hello; 
$pjf->praise_languages; 

print "\n----\n\n"; 

# So can $jarich 

$jarich->say_hello; 
$jarich->praise_languages; 

यह निम्न उत्पादन में परिणाम है:

Hello, my name is Paul Fenwick 
I enjoy programming in: Perl C JavaScript 

---- 

Hello, my name is Jacinta Richardson 
I enjoy programming in: Perl C Haskell 

अगर मैं चाहता हूँ मैं ca मेरे पास जितनी हैकर ऑब्जेक्ट्स हैं, लेकिन अभी भी एक हैकर क्लास है जो बताती है कि ये सभी कैसे काम करते हैं।

शुभकामनाएँ

,

पॉल

+1

वाह, सुपर उत्तर .. शुरुआत में संक्षिप्त सारांश, फिर एक असली दुनिया नमूना और मूस में ट्यूटोरियल! धन्यवाद! – lexu

+0

अब देखें मैंने सोचा था कि अत्यधिक शब्दशः था लेकिन हे सिर्फ यही है। अच्छा जवाब हालांकि। :) – cletus

9

एक वर्ग एक प्रकार ("एसयूवी" की तरह) है। एक वस्तु एक वर्ग ("डेविड एसयूवी") का एक उदाहरण है।

+2

मैंने हमेशा बॉडीर फॉर्म पसंद किया है: आप महिला (कक्षा) के साथ सो नहीं सकते हैं, लेकिन आप डेबी (ऑब्जेक्ट) के साथ सो सकते हैं। बेशक, अपने व्यक्तिगत स्वाद के अनुरूप संशोधित करें .... – nezroy

+0

लेकिन आप महिला :: roar() सुन सकते हैं। यह एक स्थिर विधि है। :-) –

2

ऑब्जेक्ट्स कक्षा के एकल उदाहरण हैं।

3

इसके बारे में सोचने का एक और तरीका यह है कि एक वर्ग कैसे बनाया जाएगा इसके लिए एक वर्ग एक ब्लूप्रिंट है।

2

आप वर्ग मानव

(पर्ल में कक्षाएँ कुछ विशेष गुणों के साथ मॉड्यूल हैं, तो आप बेहतर पहले ही सामान्य स्थिति को समझना चाहिए) का एक उद्देश्य है।

7

पर्ल वार:

  • एक वर्ग एक package --a विनिर्देश है। मुख्य रूप से उन व्यवहारों की सहायता के लिए व्यवहार और डेटा का एक सेट।
  • एक ऑब्जेक्ट आमतौर पर "हैशफ" होता है, जो पैकेज (और विरासत व्यवहार) में व्यवहार विनिर्देश द्वारा अनुमत विशिष्ट डेटा का संग्रह होता है।

अब, हैशफ कोड कोड संदर्भ रख सकता है। ज्यादातर मामलों में, यह व्यवहार है। लेकिन ऑब्जेक्ट उस विशिष्ट व्यवहार का उपयोग करने का एकमात्र तरीका है जिसके लिए कुछ वर्ग व्यवहार विरासत (या मिश्रित) द्वारा निर्दिष्ट किया जाना चाहिए, जो उम्मीद करता है कि उस स्थान पर बैठे कोडेफ़ हो सकता है और इसे आमंत्रित किया जा सकता है।

0

मैं लोगों को अन्य भाषाओं में समान शर्तों का उपयोग करके नहीं देखता हूं। सवाल के लिए यह एक कारण हो सकता है। मुझे लगता है कि शायद पीएचपी उपयोगकर्ता "कक्षा" कहें जब उन्हें "ऑब्जेक्ट" कहना चाहिए, बहुत समय?

वैसे भी, क्या इस उदाहरण के बारे में - कल्पना करें कि आप दो अलग अलग डेटाबेस के लिए दो अलग-अलग डेटाबेस कनेक्शन बनाने के लिए किया था:

my $oracle_database_handle = DBI->connect(<oracle connection details here>); 

my $mysql_database_handle = DBI->connect(<mysql connection details here> ); 

आप दो अलग बातें करने के लिए दो वस्तुओं बनाया होगा, लेकिन वे दोनों कर रहे हैं वही प्रकार चीज - डीबीआई डेटाबेस कनेक्शन।

1

पर्ल कक्षा में कुछ भी नहीं है लेकिन यह एक पैकेज का नाम है। वस्तुओं के लिए यह एक आम कोड है।

ऑब्जेक्ट एक ऐसा उदाहरण है जिसने कक्षा के गुण और विधियों तक पहुंच प्राप्त की है।

package vehicle; 
sub vehicle_detail 
{ 
($number,$model,$num_of_wheel)[email protected]_; 
print "My car Details:\[email protected]_"; 
} 

उपरोक्त कक्षा वाहन का उपयोग किसी भी वाहन जैसे बाइक, कार, वैन..एटीसी द्वारा किया जा सकता है। ऑब्जेक्ट ऑपरेटर आशीर्वाद द्वारा बनाया गया है।

$bike_name='honda'; 
$ref_bike=\$bike_name; 
bless $ref_bike,'vehicle'; 

अब आशीर्वाद कक्षा वाहन के लिए ऑब्जेक्ट होंडा बनाता है।

संबंधित मुद्दे