|
|
oop: object oriented programming, miàn xiàng duì xiàng de chéng xù shè jì。 suǒ wèi “ duì xiàng ” jiù shì yī gè huò yī zǔ shù jù yǐ jí chǔlǐ zhè xiē shù jù de fāng fǎ hé guò chéng de jí hé。 miàn xiàng duì xiàng de chéng xù shè jì wán quán bù tóng yú chuán tǒng de miàn xiàng guò chéng chéng xù shè jì, tā dà dà dì jiàng dī liǎo ruǎn jiàn kāi fā de nán dù, shǐ biān chéng jiù xiàng dā jī mù yī yàng jiǎn dān, shì dāng jīn diàn nǎo biān chéng de yī gǔ shì bù kě dǎng de cháo liú。
miàn xiàng duì xiàng biān chéng( objectorientedprogramming, oop, miàn xiàng duì xiàng chéng xù shè jì) shì yī zhǒng jì suàn jī biān chéng jià gòu。 oop de yī tiáo jī běn yuán zé shì jì suàn jī chéng xù shì yóu dān gè néng gòu qǐ dào zǐ chéng xù zuò yòng de dān yuán huò duì xiàng zǔ hé 'ér chéng。 oop dá dào liǎo ruǎn jiàn gōng chéng de sān gè zhù yào mù biāo: zhòng yòng xìng、 líng huó xìng hé kuò zhǎn xìng。 wèile shí xiàn zhěng tǐ yùn suàn, měi gè duì xiàng dōunéng gòu jiē shōu xìn xī、 chǔlǐ shù jù hé xiàng qí tā duì xiàng fā sòng xìn xī。 oop zhù yào yòu yǐ xià de gài niàn hé zǔ jiàn:
zǔ jiàn - shù jù hé gōng néng yī qǐ zài yùn xíng zhe de jì suàn jī chéng xù zhōng xíng chéng de dān yuán, zǔ jiàn zài oop jì suàn jī chéng xù zhōng shì mó kuài hé jié gòu huà de jī chǔ。
chōu xiàng xìng- chéng xù yòu néng lì hū lüè zhèng zài chǔlǐ zhōng xìn xī de mǒu xiē fāng miàn, jí duì xìn xī zhù yào fāng miàn guān zhù de néng lì。
fēng zhuāng- yě jiào zuò xìn xī fēng zhuāng: què bǎo zǔ jiàn bù huì yǐ bù kě yù qī de fāng shì gǎi biàn qí tā zǔ jiàn de nèi bù zhuàng tài; zhǐ yòu zài nà xiē tí gōng liǎo nèi bù zhuàng tài gǎi biàn fāng fǎ de zǔ jiàn zhōng, cái kě yǐ fǎng wèn qí nèi bù zhuàng tài。 měi lèi zǔ jiàn dū tí gōng liǎo yī gè yǔ qí tā zǔ jiàn lián xì de jiē kǒu, bìng guī dìng liǎo qí tā zǔ jiàn jìn xíng diào yòng de fāng fǎ。
duō tài xìng- zǔ jiàn de yǐn yòng hé lèi jí huì shè jí dào qí tā xǔ duō bù tóng lèi xíng de zǔ jiàn, ér qiě yǐn yòng zǔ jiàn suǒ chǎn shēng de jiēguǒ dé yǐ jù shí jì diào yòng de lèi xíng。
jì chéng xìng- yǔn xǔ zài xiàn cún de zǔ jiàn jī chǔ shàng chuàng jiàn zǐ lèi zǔ jiàn, zhè tǒng yī bìng zēng qiáng liǎo duō tài xìng hé fēng zhuāng xìng。 diǎn xíng dì lái shuō jiù shì yòng lèi lái duì zǔ jiàn jìn xíng fēn zǔ, ér qiě hái kě yǐ dìng yì xīn lèi wéi xiàn cún de lèi de kuò zhǎn, zhè yàng jiù kě yǐ jiāng lèi zǔ zhì chéng shù xíng huò wǎng zhuàng jié gòu, zhè tǐ xiàn liǎo dòng zuò de tōng yòng xìng。
yóu yú chōu xiàng xìng、 fēng zhuāng xìng、 zhòng yòng xìng yǐ jí biàn yú shǐ yòng děng fāng miàn de yuán yīn, yǐ zǔ jiàn wéi jī chǔ de biān chéng zài jiǎo běn yǔ yán zhōng yǐ jīng biàn dé tè bié liú xíng。 python hé ruby shì zuì jìn cái chū xiàn de yǔ yán, zài kāi fā shí wán quán cǎi yòng liǎo oop de sī xiǎng, ér liú xíng de perl jiǎo běn yǔ yán cóng bǎn běn 5 kāi shǐ yě màn màn dì jiā rù liǎo xīn de miàn xiàng duì xiàng de gōng néng zǔ jiàn。 yòng zǔ jiàn dài tì“ xiàn shí” shàng de shí tǐ chéng wéi javascript( ecmascript) dé yǐ liú xíng de yuán yīn, yòu lùn zhèng biǎo míng duì zǔ jiàn jìn xíng shìdàng de zǔ hé jiù kě yǐ zài yīng tè wǎng shàng dài tì html hé xml de wén dàng duì xiàng mó xíng( dom)。
yī、 oop de jī běn sī xiǎng
oop de xǔ duō yuán shǐ sī xiǎng dōulái zhī yú simula yǔ yán, bìng zài smalltalk yǔ yán de wán shàn hé biāo zhǔn huà guò chéng zhōng dé dào gèng duō de kuò zhǎn hé duì yǐ qián de sī xiǎng de chóngxīn zhù jiě。 kě yǐ shuō oo sī xiǎng hé oopl jīhū shì tóng bù fā zhǎn xiāng hù cù jìn de。 yǔ hán shù shì chéng xù shè jì( functional-programming) hé luó ji shì chéng xù shè jì( logic-programming) suǒ dài biǎo de jiē jìn yú jī qì de shí jì jì suàn mó xíng suǒ bù tóng de shì, oop jīhū méi yòu yǐn rù jīng què de shù xué miáo xù, ér shì qīng xiàng yú jiàn lì yī gè duì xiàng mó xíng, tā néng gòu jìn sì de fǎn yìng yìng yòng lǐng yù nèi de shí tǐ zhī jiān de guān xì, qí běn zhì shì gèng jiē jìn yú yī zhǒng rén lèi rèn zhī shì wù suǒ cǎi yòng de zhé xué guān de jì suàn mó xíng。 yóu cǐ, dǎo zhì liǎo yī gè zì rán de huà tí, nà jiù shì oop dào dǐ shì shénme? [d&t1988][b.s1991].。 zài oop zhōng, duì xiàng zuò wéi jì suàn zhù tǐ, yōng yòu zì jǐ de míng chēng, zhuàng tài yǐ jí jiē shòu wài jiè xiāo xī de jiē kǒu。 zài duì xiàng mó xíng zhōng, chǎn shēng xīn duì xiàng, jiù duì xiàng xiāo huǐ, fā sòng xiāo xī, xiǎng yìng xiāo xī jiù gòu chéng oop jì suàn mó xíng de gēn běn。
duì xiàng de chǎn shēng yòu liǎng zhǒng jī běn fāng shì。 yī zhǒng shì yǐ yuán xíng( prototype) duì xiàng wéi jī chǔ chǎn shēng xīn de duì xiàng。 yī zhǒng shì yǐ lèi( class) wéi jī chǔ chǎn shēng xīn duì xiàng。 yuán xíng de gài niàn yǐ jīng zài rèn zhī xīn lǐ xué zhōng bèi yòng lái jiě shì gài niàn xué xí de dì zēng tè xìng, yuán xíng mó xíng běn shēn jiù shì qǐ tú tōng guò tí gōng yī gè yòu dài biǎo xìng de duì xiàng wéi jī chǔ lái chǎn shēng gè zhǒng xīn de duì xiàng, bìng yóu cǐ jì xù chǎn shēng gèng fú hé shí jì yìng yòng de duì xiàng。 ér yuán xíng - wěi tuō yě shì oop zhōng de duì xiàng chōu xiàng, dài mǎ gòng xiǎng jī zhì zhōng de yī zhǒng。 yī gè lèi tí gōng liǎo yī gè huò zhě duō gè duì xiàng de tōng yòng xìng miáo xù。 cóng xíng shì huà de guān diǎn kàn, lèi yǔ lèi xíng yòu guān, yīn cǐ yī gè lèi xiāng dāng yú shì cóng gāi lèi zhōng chǎn shēng de shí lì de jí hé。 ér zhè yàng de guān diǎn yě huì dài lái yī xiē máo dùn, bǐ jiào diǎn xíng de jiù shì zài jì chéng tǐ xì xià, zǐ jí( zǐ lèi) duì xiàng hé fù jí( fù lèi) duì xiàng zhī jiān de xíng wéi xiāng róng xìng kě néng hěn nán dá dào, zhè yě jiù shì oop zhōng cháng bèi yǐn yòng de --- zǐ lèi xíng( subtype) bù děng yú zǐ lèi( subclass) [budd2002]。 ér zài yī zhǒng suǒ yòu jiē duì xiàng de shì jiè guān bèi jǐng xià, zài lèi mó xíng jī chǔ shàng hái dàn shēng chū liǎo yī zhǒng yōng yòu yuán lèi( metaclass) de xīn duì xiàng mó xíng。 jí lèi běn shēn yě shì yī zhǒng qí tā lèi de duì xiàng。 yǐ shàng sān zhǒng gēn běn bù tóng de guān diǎn gè zì dìng yì liǎo sān zhǒng jī yú lèi( class-based) , jī yú yuán xíng( prototype-based) hé jī yú yuán lèi( metaclass-based) de duì xiàng mó xíng。 ér zhè sān zhǒng duì xiàng mó xíng yě jiù dǎo zhì liǎo xǔ duō bù tóng de chéng xù shè jì yǔ yán( rú guǒ wǒ men zàn shí bǎ jìng tài yǔ dòng tài de chā bié fàng zài yī biān)。 shì de, wǒ men jīng cháng jiē chù de c++,java dōushì shǐ yòng jī yú lèi de duì xiàng mó xíng, dàn chú cǐ zhī wài hái yòu hěn duō wǒ men suǒ méi yòu jiē chù de oopl cǎi yòng liǎo wán quán bù yī yàng de duì xiàng mó xíng, tā men shì zài yòng lìng wài yī zhǒng guān diǎn quán shì oop de nèi hán。
shénme shì oop de jī běn sī xiǎng ní? bǎ zǔ jiàn de shí xiàn hé jiē kǒu fēn kāi, bìng qiě ràng zǔ jiàn jù yòu duō tài xìng。 bù guò, liǎng zhě hái shì yòu gēn běn de bù tóng。 oop qiáng diào zài chéng xù gòu zào zhōng yǔ yán yào sù de yǔ fǎ。 nǐ bì xū dé jì chéng, shǐ yòng lèi, shǐ yòng duì xiàng, duì xiàng chuán dì xiāo xī。 gp bù guān xīn nǐ jì chéng huò shì bù jì chéng, tā de kāi duān shì fēn xī chǎn pǐn de fēn lèi, yòu xiē shénme zhǒng lèi, tā men de xíng wéi rú hé。 jiù shì shuō, liǎng jiàn dōng xī xiāng děng yì wèi zhe shénme? zěn yàng zhèng què dì dìng yì xiāng děng cāo zuò? bù dān dān shì xiāng děng cāo zuò nà me jiǎn dān, nǐ wǎng shēn chù fēn xī jiù huì fā xiàn“ xiāng děng” zhè gè yī bān guān niàn yì wèi zhe liǎng gè duì xiàng bù fēn, huò zhě zhì shǎo jī běn bù fēn shì xiāng děng de, jù cǐ wǒ men jiù kě yǐ yòu yī gè tōng yòng de xiāng děng cāo zuò。 zài shuō duì xiàng de zhǒng lèi。 jiǎ shè cún zài yī gè shùn xù xù liè hé yī zǔ duì yú shùn xù xù liè de cāo zuò。 nà me zhè xiē cāo zuò de yǔ yì shì shénme? cóng fù zá dù quán héng de jiǎo dù kàn, wǒ men yīnggāi xiàng yòng hù tí gōng shénme yàng de shùn xù xù liè? gāi zhǒng xù liè shàng cún zài nà xiē cāo zuò? nà zhǒng pái xù shì wǒ men xū yào de? zhǐ yòu duì zhè xiē zǔ jiàn de gài niàn xíng fēn lèi gǎo qīng chǔ liǎo, wǒ men cái néng tí dào shí xiàn de wèn tí: shǐ yòng múbǎn、 jì chéng hái shì hóng? shǐ yòng shénme yǔ yán hé jì shù? gp de jī běn guān diǎn shì bǎ chōu xiàng de ruǎn jiàn zǔ jiàn hé tā men de xíng wéi yòng biāo zhǔn de fēn lèi xué fēn lèi, chū fā diǎn jiù shì yào jiàn zào zhēn shí de、 gāo xiào de hé bù qǔ jué yú yǔ yán de suàn fǎ hé shù jù jié gòu。 dāng rán zuì zhōng de zài tǐ hái shì yǔ yán, méi yòu yǔ yán méi fǎ biān chéng。 stl shǐ yòng c++, nǐ yě kě yǐ yòng ada lái shí xiàn, yòng qí tā de yǔ yán lái shí xiàn yě xíng, jiēguǒ huì yòu suǒ bù tóng, dàn jī běn de dōng xī shì yī yàng de。 dào chù dōuyào yòng dào 'èr fēn chá zhǎo hé pái xù, ér zhè jiù shì rén men zhèng zài zuò de。 duì yú róng qì de yǔ yì, bù tóng de yǔ yán huì dài lái qīng wēi de bù tóng。 dàn shì jī běn de qū bié hěn qīng chǔ shì gp suǒ yǐ cún de yǔ yì, yǐ jí yǔ yì fēn jiě。 lì rú, wǒ men jué dìng xū yào yī gè zǔ jiàn swap, rán hòu zhǐ chū zhè gè zǔ jiàn zài bù tóng de yǔ yán zhōng rú guǒ gōng zuò。 xiǎn rán zhòng diǎn shì yǔ yì yǐ jí yǔ yì fēn lèi。 ér oop suǒ qiáng diào de( wǒ rèn wéi shì guòfèn qiáng diào de) shì qīng chǔ de dìng yì lèi zhī jiān de céng cì guān xì。 oop gào sù liǎo nǐ rú hé jiàn lì céng cì guān xì, què méi yòu gào sù nǐ zhè xiē guān xì de shí zhì。
( zhè duàn bù tài hǎo lǐ jiě, yòu yī xiē shù yǔ kě néng yào guò yī duàn shí jiān cái huì yòu hé shì de zhōng wén fān yì héng héng yì zhě)
miàn xiàng duì xiàng de biān chéng fāng fǎ oop shì jiǔ shí nián dài cái liú xíng de yī zhǒng ruǎn jiàn biān chéng fāng fǎ。 tā qiáng diào duì xiàng de“ chōu xiàng”、“ fēng zhuāng”、“ jì chéng”、“ duō tài”。 wǒ men jiǎng chéng xù shè jì shì yóu“ shù jù jié gòu” +“ suàn fǎ” zǔ chéng de。 cóng hóng guān de jiǎo dù jiǎng, oop xià de duì xiàng shì yǐ biān chéng wéi zhōng xīn de, shì miàn xiàng chéng xù de duì xiàng。 wǒ men jīn tiān yào jiǎng de ood shì miàn xiàng xìn xī de duì xiàng, shì yǐ yòng hù xìn xī wéi zhōng xīn de。
èr、 oop jì shù de lì shǐ
miàn xiàng duì xiàng jì shù zuì chū shì cóng miàn xiàng duì xiàng de chéng xù shè jì kāi shǐ de, tā de chū xiàn yǐ 60 nián dài simula yǔ yán wéi biāo zhì。 80 nián dài zhōng hòu qī, miàn xiàng duì xiàng chéng xù shè jì zhú jiàn chéng shú, bèi jì suàn jī jiè lǐ jiě hé jiē shòu, rén men yòu kāi shǐ jìn yī bù kǎo lǜ miàn xiàng duì xiàng de kāi fā wèn tí。 zhè jiù shì jiǔ shí nián dài yǐ microsoftvisual xì liè oop ruǎn jiàn de liú xíng de bèi jǐng。
chuán tǒng de jié gòu huà fēn xī yǔ shè jì kāi fā fāng fǎ shì yī gè xiàn xìng guò chéng, yīn cǐ, chuán tǒng de jié gòu huà fēn xī yǔ shè jì fāng fǎ yào qiú xiàn shí xì tǒng de yè wù guǎn lǐ guī fàn, chǔlǐ shù jù qí quán, yòng hù néng quán miàn wán zhěng dì qí yè wù xū qiú。
chuán tǒng de ruǎn jiàn jié gòu hé shè jì fāng fǎ nán yǐ shì yìng ruǎn jiàn shēng chǎn zì dòng huà de yào qiú, yīn wéi tā yǐ guò chéng wéi zhōng xīn jìn xíng gōng néng zǔ hé, ruǎn jiàn de kuò chōng hé fù yòng néng lì hěn chā。
duì xiàng shì duì xiàn shí shì jiè shí tǐ de mó nǐ, yīn miàn néng gèng róng yì dì lǐ jiě xū qiú, jí shǐ yòng hù hé fēn xī zhě zhī jiān jù yòu bù tóng de jiào yù bèi jǐng hé gōng zuò tè diǎn, yě kě hěn hǎo dì gōu tōng。
qū bié miàn xiàng duì xiàng de kāi fā hé chuán tǒng guò chéng de kāi fā de yào sù yòu: duì xiàng shí bié hé chōu xiàng、 fēng zhuāng、 duō tài xìng hé jì chéng。
duì xiàng (object) shì yī gè xiàn shí shí tǐ de chōu xiàng, yóu xiàn shí shí tǐ de guò chéng huò xìn xī shēng lái dìng yì。 yī gè duì xiàng kě bèi rèn wéi shì yī gè bǎ shù jù( shǔ xìng) hé chéng xù( fāng fǎ) fēng zhuāng zài yī qǐ de shí tǐ, zhè gè chéng xù chǎn shēng gāi duì xiàng de dòng zuò huò duì tā jiē shòu dào de wài jiè xìn hào de fǎn yìng。 zhè xiē duì xiàng cāo zuò yòu shí chēng wéi fāng fǎ。 duì xiàng shì gè dòng tài de gài niàn , qí zhōng de shǔ xìng fǎn yìng liǎo duì xiàng dāng qián de zhuàng tài。
lèi (class) yòng lái miáo shù jù yòu xiāng tóng de shǔ xìng hé fāng fǎ de duì xiàng de jí hé。 tā dìng yì liǎo gāi jí hé zhōng měi gè duì xiàng suǒ gòng yòu de shǔ xìng hé fāng fǎ。 duì xiàng shì lèi de shí lì。
yóu shàng fēn xī bù nán kàn chū, jìn guǎn oop jì shù gèng kàn zhōng yòng hù de duì xiàng mó xíng, dàn qí mùdì dōushì yǐ biān chéng wéi mù de de, ér bù shì yǐ yòng hù de xìn xī wéi zhōng xīn de, zǒng xiǎng bǎ yòng hù de xìn xī nà rù dào mǒu gè yòng hù bù gǎn xīng qù de“ chéng xù duì xiàng” zhōng。
sān、 oop de yōu quē diǎn
·oop de yōu diǎn: shǐ rén men de biān chéng yǔ shí jì de shì jiè gèng jiā jiē jìn, suǒ yòu de duì xiàng bèi fù yú shǔ xìng hé fāng fǎ, jiēguǒ biān chéng jiù gèng jiā fù yòu rén xìng huà。
·oop de yě yòu quē diǎn, jiù c++ ér yán, yóu yú miàn xiàng gèng gāo de luó ji chōu xiàng céng, shǐ dé c++ zài shí xiàn de shí hòu, bù dé bù zuò chū xìng néng shàng miàn de xī shēng, yòu shí hòu shèn zhì shì zhì mìng de ( suǒ yòu duì xiàng de shǔ xìng dū jīng guò nèi zhì duō zhòng zhǐ zhēn de jiànjiē yǐn yòng shì qí xìng néng sǔn shī de zhù yào yuán yīn zhī yī; bù guò, bǐ zhě de jú xiàn xìng zài yú wèi shǐ yòng guò vc++ wài de miàn xiàng duì xiàng yǔ yán, suǒ yǐ bù shì shí fēn kěn dìng, hā hā, yòu rén xiào chū lái liǎo … )。
zài jì suàn jī sù dù fēi sù fā zhǎn de jīn tiān, nǐ kě néng huì shuō, yī dīng diǎn de xìng néng xī shēng méi shí me dà bù liǎo。 shì de, cóng miàn xiàng duì xiàng de jiǎo dù, shǐ de biān chéng de jié gòu gèng jiā qīng xī wán zhěng, shù jù gèng jiā dú lì hé yì yú guǎn lǐ, xìng néng de xī shēng kě yǐ dài lái zhè me duō de hǎo chù, méi yòu lǐ yóu bù zuò wěn zuàn de shēng yì bā?
bù guò, zài mǒu xiē duì sù dù yào qiú jí gāo tè shū chǎng hé, lì rú nǐ zuò de shì diàn xìn de jiāo huàn xì tǒng, měi miǎo zhōng yòu chāo guò bǎi wàn de rén tóng shí jìn xíng diàn huà jiāo huàn, rú guǒ, měi yī gè shù jù jiāo huàn guò chéng dōushì yī gè duì xiàng, nà me zǒng de xìng néng sǔn shī jiāng shì tiān wén shù zì!!
huò zhě zhè gè lì zǐ bù gòu tiē shēn, zài jǔ gè lì zǐ bā。 jiǎ rú nǐ shòu pìn yú yī gè yóu xì shè jì gōng sī, lǎo bǎn xī wàng zuò chū lái de yóu xì kě yǐ gèng duō de jiān gù dào gèng duō de diàn nǎo shǐ yòng zhě, yóu xì měi miǎo zhōng de yùn xíng de zhēn kě yǐ gèng duō, zǐ dàn hé bào zhà wù kě yǐ gèng duō、 gèng huá lì。 nà me, nǐ huì fā xiàn shǐ yòng c++ huì shǐ nǐ de chéng xù biàn dé bèn zhuō, wú fǎ mǎn zú nǐ de xū qiú, chú fēi nǐ fēi dé yào nǐ de yóu xì yùn xíng yú bēn téng sì de jī qì shàng ( rú guǒ bù shì, ér nǐ yòu jiān chí yòng c++ de duì xiàng biān chéng, nà me qǐng jiǎn shǎo zhùjué de qiāng de wēi lì bā )。
rú guǒ nǐ shì míng wán bù níng de rén, nǐ shuō bù xiāng xìn oop huì yòu xìng néng shàng de sǔn shī, nà me, wǒ jì dé céng kàn dào zài csdn shàng guān yú vb hé vc zhí xíng xiàolǜ de tǎo lùn de wén zhāng, jiǎng shù de jiù shì shǐ yòng liǎo mfc yǐ hòu, zhí xíng xiàolǜ shèn zhì dī yú vb kāi fā chū lái de dōng xī。 qǐng gè wèi yàn zhèng yī xià: rú guǒ shǐ yòng de shì chún cuì de c yǔ yán yǔ fǎ de huà, nà me yī dìng huì bǐ zài vb biān chū lái de dōng xī yào kuài hěn duō (gettickcount hán shù kě yǐ chá yuè msdn, rú guǒ xiǎng gèng jiā jīng què yī xiē, kě yǐ shǐ yòng queryperformancecounter hán shù )。
sì、 oop de wèi lái( zhuàn wén /bjarnestroustrup&timlindholm biān yì / mèng yán)
zài wèi lái sān nián, chéng xù yuán biān xiě dài mǎ de fāng shì huì fā shēng nà xiē biàn huà?
stroustrup: zài c++ zhōng, jiǎ rú méi yòu hé shì de kù zài bèi hòu zhī chēng, wán chéng rèn hé zhòng yào de gōng zuò dōukě néng shì hěn fù zá de。 ér yī dàn yòu liǎo hé shì de kù, rèn hé dōng xī dōukě yǐ bèi wǒ men cāo kòng yú gǔ zhǎng zhī jiān。 yīn cǐ, gòu zào hé shǐ yòng chéng xù kù de zhòng yào xìng yǔ rì jù zēng。 zhè yě 'àn shì wǒ men, fàn xíng chéng xù shè jì (genericprogramming) jiāng huì yuè lái yuè duō dì bèi yùn yòng。 zhǐ yòu tōng guò gp, wǒ men cái néng què bǎo kù de tōng yòng xìng hé gāo xiàolǜ。 wǒ hái yù qī zài fēn bù shì jì suàn hé“ zǔ jiàn( components)” yìng yòng lǐng yù huì chū xiàn xǐ rén de zēngzhǎng。 jiù dà bù fēn chéng xù yuán 'ér yán, tōng guò shǐ yòng fāng biàn shì yòng de chéng xù kù, zhè xiē kāi fā gōng zuò huì biàn dé jiǎn dān míng liǎo。
xiàn zài yòu yī gè qū shì, biān yì qì chǎng shāng shì tú bǎ qí tè yòu de“ duì xiàng mó xíng” hé tú xíng jiè miàn (gui) xì jié tuī xiāo gěi yòng hù。 bǐ rú wēi ruǎn de com hé inprise de lèi shǔ xìng“ properties”。 duì yú yòng hù lái shuō, zhè jì bù bì yào, yě bù qíng yuàn。 wǒ suǒ xī wàng kàn dào de chéng xù kù, yīnggāi shì yòng biāo zhǔn c++ dǎ zào, jiè miàn líng huó, zhí dé xìn lài de chéng xù kù。 tōng cháng, zhè xiē jiè miàn yīnggāi shì píng tái wú guān de。 c++ de biǎo dá néng lì jí qiáng, jí shǐ bù shǐ yòng dà liàng de hóng, yě yìng gāi zú yǐ dá chéng zhè yī yào qiú。 jiù suàn yòu xiē dì fāng wú fǎ bǎi fēn zhī bǎi de zūn shǒu zhè yī yuán zé, yě yìng gāi jiāng duì yú píng tái hé chǎng jiā de yǐ lài xìng xiàn zhì qǐ lái。 zhè gè mù biāo de wán chéng qíng kuàng, kě yǐ fǎn yìng ruǎn jiàn gōng jù chǎn yè duì yú yìng yòng chéng xù kāi fā hángyè de guān zhù chéng dù。 wǒ huái yí mù qián duì yú nà xiē dú lì de、 kuà píng tái chǎng shāng lái shuō, bìng bù cún zài xiāng yìng de shì chǎng。 rú guǒ néng gòu jiàn lì zhè yàng de shì chǎng, yě xǔ néng gòu cù jìn chǎng shāng men wéi kè hù zuò chū“ zhēn zhèng yòu yòng de” chǎn pǐn。
lindholm: duì yú biān xiě dài mǎ de kāi fā zhě lái shuō, zhù yào de qū dòng lì liàng réng jiāng shì liǎng gè: wǎng luò hé fēn bù shì héng héng yě jiù shì shè jì hé kāi fā fēi dān jī ruǎn jiàn de xū qiú。 dà bù fēn de yìng yòng chéng xù jiāng bù huì shì gū líng líng dì yùn xíng zài dān yī shè bèi shàng, ér shì yùn yòng liǎo lèi sì ejb hé jsp zhī lèi jì shù de, píng tái wú guān de fēn bù shì chéng xù。 chéng xù yuán men jiāng bù dé bù miàn duì fēn bù shì jì suàn de chóngchóng xiǎn zǔ。 zhè jiāng duì xǔ duō chéng xù yuán suǒ yǐ lài de shè jì mó shì、 jì shù hé zhí jué gòu chéng yán jùn de tiǎo zhàn。 zhè shì xuǎn zé biān chéng yǔ yán zhī qián bì xū rèn shí dào de, jìn guǎn bù tóng yǔ yán de shè jì tè xìng kě néng cù jìn huò zhě zǔ 'ài zhè yī zhuǎn huà。
zài wǎng luò yìng yòng de zēng cháng zhōng, yī gè hěn zhòng yào de bù fēn shì xiǎo xíng yí dòng shè bèi hé tè shū internet shè bèi de bào zhà xìng zēngzhǎng。 zhè xiē shè bèi gè yòu gè de cāo zuò xì tǒng, huò zhě zhǐ zài mǒu zhǒng tè dìng de shè bèi lǐng yù nèi yòu gòng tóng de cāo zuò xì tǒng。 wǒ men xiàn zài hái kě yǐ yī yī liè jǔ chū zhè xiē shè bèi héng héng jiā tíng jiē rù shè bèi、 fēng wō diàn huà、 diàn zǐ bào zhǐ、 pda、 zì dòng wǎng luò shè bèi děng děng。 dàn shì zhè xiē shè bèi lǐng yù de shù liàng hé shēn rù chéng dù jiāng huì hěn kuài biàn dé nán yǐ gūliáng。 wǒ mendōu zhī dào zhè gè shì chǎng dà dé jīng rén, pc de xīng qǐ yǔ zhī xiāng bǐ bù guò xiǎo cài yī dié。 yīn cǐ zài zhè xiē shè bèi de yìng yòng chéng xù shì chǎng shàng, jìng zhēng jiāng huì xiāng dāng cán kù。 huò shèng de zhòng yào shǒu duàn zhī yī, jiù shì jìn kuài jìn rù shì chǎng。 kāi fā rén yuán xū yào yōu xiù de gōng jù, xùn sù gāo xiào dì zhuàn xiě hé diào shì tā men de ruǎn jiàn。 píng tái wú guān xìng yě shì zhì shèng mì jué zhī yī, tā shǐ dé chéng xù yuán néng gòu kāi fā chū zhī chí duō zhǒng shè bèi píng tái de ruǎn jiàn。
wǒ yù qī de lìng yī gè biàn huà shì, wǒ men duì yú dài mǎ (java) hé shù jù (xml) xié tóng xíng yìng yòng chéng xù de kāi fā néng lì jiāng huì bù duàn tí gāo。 zhè zhǒng xié tóng shì kāi fā qiáng dà yìng yòng chéng xù de hé xīn mù biāo zhī yī。 wǒ men cóng xml de xùn sù liú xíng hé ebxml guī fàn de jìn zhǎn zhōng, yǐ jīng kàn dào liǎo zhè gè qū shì。 ebxml shì yī gè zhēn duì diàn zǐ shāng wù hé guó jì mào yì de, jī yú xml de kāi fàng shì jī chǔ gòu jià, yóu lián hé guó mào yì cù jìn hé diàn zǐ shāng wù zhōng xīn (un/cefact) yǔ jié gòu xìng xìn xī biāo zhǔn tuī jìn zǔ zhì (oasis) gòng tóng kāi fā。
wǒ men néng fǒu qī wàng chū xiàn yī gè zhēn zhèng de miàn xiàng zǔ jiàn (component-oriented) de yǔ yán? tā de chuàng zào zhě huì shì shuí ní?
stroustrup: wǒ huái yí, zhè gè lǐng yù zhōng zhī suǒ yǐ quē fá chéng guǒ, zhèng shì yīn wéi rén men héng héng zhù yào shì nà xiē fēi chéng xù yuán men héng héng duì“ zǔ jiàn” zhè gè yì yì hán hú de zì yǎn jì yú liǎo tài duō de qī wàng。 zhè xiē rén shì mèng xiǎng, yòu cháo yī rì, zǔ jiàn huì yǐ mǒu zhǒng fāng shì bǎ chéng xù yuán gǎn chū lì shǐ wǔ tái。 yǐ hòu nà xiē chènzhí de“ shè jì yuán” zhǐ xū lì yòng yù xiān tiáozhěng hǎo de zǔ jiàn, bǎ shǔ biāo tuō yī tuō fàng yī fàng, jiù bǎ xì tǒng zǔ hé chū lái。 duì yú ruǎn jiàn gōng jù chǎng shāng lái shuō, zhè zhǒng xiǎng fǎ hái yòu lìng yī céng yì yì, tā men rèn wéi, dào shí hòu zhǐ yòu tā men cái bǎo liú yòu bì yào de jì shù, yòu néng lì biān xiě zhè yàng de zǔ jiàn。
zhè zhǒng xiǎng fǎ yòu yī gè zuì jī běn de miù wù: zhè zhǒng zǔ jiàn hěn nán huò dé guǎng fàn huān yíng。 yī gè dān dú de zǔ jiàn huò kuàng jià (framework), rú guǒ néng gòu mǎn zú yī gè yìng yòng chéng xù huò zhě yī gè chǎn yè lǐng yù duì suǒ tí chū de dà bù fēn yào qiú de huà, duì yú qí zhì zào zhě lái shuō jiù shì huá suàn de chǎn pǐn, ér qiě jì shù shàng yě bù shì hěn kùn nán。 kě shì gāi chǎn yè nèi de jǐ gè jìng zhēng zhě hěn kuài jiù huì fā xiàn, rú guǒ suǒ yòu réndōu cǎi yòng zhè xiē zǔ jiàn, nà me bǐ cǐ zhī jiān de chǎn pǐn jiù huì biàn dé tiān xià dà tóng, méi shí me qū bié, tā men jiāng lún wéi jiǎn dān de bàn shì yuán, zhù yào lì rùn dū jiāng zuàn jìn nà xiē zǔ jiàn / kuàng jià gōng yìng shāng de yāo bāo lǐ!
xiǎo“ zǔ jiàn” hěn yòu yòng, bù guò chǎn shēng bù liǎo yù qī de gàng gān xiào yìng。 zhōng xíng de、 gèng tōng yòng de zǔ jiàn fēi cháng yòu yòng, dàn shì gòu zào shí xū yào fēi tóng xún cháng de tánxìng。
zài c++ zhōng, wǒ men zōng hé yùn yòng bù tóng gòng xiǎng xíng shì de lèi tǐ xì (classhierarchies), yǐ jí shǐ yòng templates jīng xīn dǎ zào de jiē kǒu, zài zhè fāng miàn qǔ dé liǎo yī dìng de jìn zhǎn。 wǒ qī dài zài zhè gè lǐng yù qǔ dé yī xiē yòu qù hé yòu yòng de chéng guǒ, bù guò wǒ rèn wéi zhè zhǒng chéng guǒ hěn kě néng shì yī zhǒng xīn de c++ chéng xù shè jì fēng gé, ér bù shì yī zhǒng xīn de yǔ yán。
lindholm: biān xiě miàn xiàng zǔ jiàn de yìng yòng chéng xù, hǎo xiàng gèng duō de shì gè tóu zī、 shè jì hé chéng xù yuán guǎn lǐ fāng miàn de wèn tí, ér bù shì yī gè biān chéng yǔ yán wèn tí。 dāng rán mǒu xiē yǔ yán zài zhè fāng miàn jù yòu xiān tiān yōu shì, bù guò rú guǒ shuō yòu shénme mó shù bān de xīn yǔ yán néng gòu dà dà jiǎn huà zǔ jiàn de biān xiě nán dù, nà chún cuì shì yī zhǒng wù dǎo。
wēi ruǎn yǐ jīng jiāng quán bù dǔ zhù yā zài [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] shàng, qí tā yǔ yán hé qù hé cóng?
stroustrup:c++ zài xià yī gè shí nián lǐ réng rán jiāng shì yī zhǒng zhù liú yǔ yán。 miàn duì xīn de tiǎo zhàn, tā huì fèn qǐ yìng duì。 yī gè chuàng zào liǎo nà me duō chū sè xì tǒng de yǔ yán, jué bù huì“ zuò shì luò huā liú shuǐ chūn qù yě”。
wǒ xī wàng wēi ruǎn rèn shí dào, tā zài c++( wǒ zhǐ de shì iso biāo zhǔn c++) shàng yòu zhe jù dà de lì yì, c++ shì tā yǔ it shì jiè nèi qí tā rén zhī jiān de yī zuò qiáo liáng, shì gòu zào dà xíng xì tǒng hé qiàn rù shì xì tǒng de yòu xiào gōng jù, yě shì mǎn zú gāo xìng néng xū qiú de lì qì。 qí tā yǔ yán, sì hū gèng zhù zhòng nà xiē sì píng bā wěn de shāng yòng chéng xù。
jìng zhēng
[fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] huì bù huì huò dé guǎng fàn de jiē shòu, bìng qiě jǐ diào qí tā de yǔ yán?
lindholm: tōng cháng, yī zhǒng yǔ yán jì bù huì cóng bié de yǔ yán nà lǐ huò lì, yě bù huì bèi jǐ diào。 nà xiē jiān dìng de fortran chéng xù yuán bù hái yòng zhe fortran má? duì yú gè rén lái shuō, yǔ yán de xuǎn zé dāng rán yīn shí 'ér yì, dàn jiù zhěng tǐ 'ér yán, yǔ yán de zhǒng lèi zhǐ huì dì zēng, yě jiù shì shuō, tā men zhī jiān de guān xì shì“ yòu nǐ yòu wǒ” ér bù shì“ yòu nǐ méi wǒ”。
duì yú yī gè xīn yǔ yán de jiē shòu chéng dù, wǎng wǎng qǔ jué yú qí néng lì suǒ jí。 java jì shù bèi xùn sù jiē shòu, yuán yīn shì duō fāng miàn de, internet hé worldwideweb jiē kǒu, zài qí tā jì shù miàn qián de cuò zhé gǎn, duì yú java jì shù fā zhǎn fāng xiàng de quán miàn yǐng xiǎng néng lì, dōushì yuán yīn。 lìng yī gè zhòng yào de yuán yīn shì java dú lì yú chǎng shāng, zhè yì wèi zhe zài jiān róng chǎn pǐn miàn qián kě yǐ cóng róng xuǎn zé。
[fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] shì fǒu huì huò dé guǎng fàn jiē shòu? shì qíng kuàng 'ér dìng。 zǒng de lái shuō, nà xiē duì yú píng tái wú guān xìng hé chǎng shāng wú guān xìng mò bù guān xīn de chéng xù yuán, kě néng huì xǐ huān c#。 nà xiē gēn wēi ruǎn píng tái kǔn zài yī qǐ rén dāng rán kě néng xiǎng yào xún zhǎo vb hé vc de yī gè chū sè de tì dài pǐn。 dàn shì duì yú chéng xù kuà píng tái zhí xíng néng lì tè bié guān zhù de chéng xù yuán, jiāng huì jiān shǒu java zhī lèi de yǔ yán。 zhè zhǒng néng lì duì yú duō zhòng fǎng wèn shè bèi( multipleaccessdevices) hé fēn bù shì jì suàn mó xíng zhì guān zhòng yào, ér java yǔ yán tí gōng liǎo yī gè biāo zhǔn de、 dú lì yú chǎng shāng yùn xíng shí huán jìng。
stroustrup:[fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] de liú xíng chéng dù jīhū wán quán qǔ jué yú wēi ruǎn tóu rù de zī jīn duō shǎo。 kàn shàng qù [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] de xīng qǐ kěn dìng huì xī shēng diào qí tā yī xiē yǔ yán de lì yì, dàn shì shì shí shàng wèi bì rú cǐ。 java de péng bó fā zhǎn bìng méi yòu gěi c++ dài lái shuāi bài。 c++ de yìng yòng réng rán zài wěn dìng zēngzhǎng( dāng rán, yǐ jīng bù shì bào zhà xìng de zēngzhǎng liǎo)。 yě xǔ qí tā de yǔ yán yě hái néng huò dé zì jǐ de yī xí zhī dì。
bù guò, wǒ shí zài kàn bù chū yòu shénme bì yào zài fā míng yī zhǒng xīn de zhuān yòu yǔ yán。 tè bié shì wēi ruǎn, jì shēng vb, hé xū c#?
bù tóng oop yǔ yán gè yòu shénme yōu shì hé liè shì?
stroustrup:c++ de yōu diǎn zì shǐ zhì zhōng dōushì zhè me jǐ tiáo: líng huó、 gāo xiào, ér qiě bìng fēi zhuān yòu yǔ yán。 xiàn zài isoc++ biāo zhǔn de chū xiàn, gǒng gù liǎo zuì hòu yī diǎn。
wǒ rèn wéi c++ de gāo xiào shì tā zuì jī běn de yōu diǎn。 zhè zhǒng gāo xiào lái zì yú qí tè yòu de shù jù hé jì suàn mó xíng, jiào zhī java hé c#, zhè zhǒng mó xíng gèng jiā tiē jìn jī qì。 bù guò, nǎ xiē chéng xù cái zhēn zhèng dì kě wàng zhè me gāo de xiàolǜ? zhè shì gè wèn tí。 wǒ rèn wéi zhè lèi chéng xù fēi cháng duō。 rén men duì yú jì suàn jī de qī wàng, yǒng yuǎn dū chāo yuè yìng jiàn kē jì de fā zhǎn sù dù。 hěn xiǎn rán, java hé [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] de shè jì zhě de xiǎng fǎ bù tóng, tā men rèn wéi, zài hěn duō dì fāng xiàolǜ wèn tí wú guān jǐn yào。
c++ zhù yào de quē diǎn, guī zuì yú zāo gāo de jiào yù( shì nà xiē shǐ zhōng rèn wéi c++ shì gè chún cuì miàn xiàng duì xiàng yǔ yán de rén, hé nà xiē bǎ c++ dàngchéng c yǔ yán biàn tǐ de rén dǎo zhì liǎo zhè zhǒng qíng kuàng), guī zuì yú bù tóng píng tái shàng de bù yī zhì xìng, guī zuì yú bù wán zhěng、 bù biāo zhǔn de biān yì qì shí xiàn, guī zuì yú píng tái wú guān de xì tǒng jí chéng xù kù de quē shǎo。
zhè xiē wèn tí guī yú yī diǎn, jiù shì quē fá yī gè zhuó yuè de chǎng shāng, néng gòu mǎn zú zhěng gè c++ shè qū de xū qiú, yǒng yú tóu rù dà liàng de zī jīn kāi fā bì yào de chéng xù kù。
lindholm:java jì shù de chéng gōng, shì yīn wéi tā zài hé shì de shí jiān, chū xiàn zài hé shì de dì diǎn, ér qiě hé lǐ dì xuǎn zé liǎo yǔ yán hé jì suàn píng tái de zhī chí mù biāo。 java bìng bù shì zài suǒ yòu chǎng hé dū yōu yú qí tā oop yǔ yán, dàn shì duì yú chū xiàn de xīn wèn tí néng gòu jiě jué dé hěn chū sè。 tā miàn xiàng internet jì suàn huán jìng, bì miǎn liǎo c++ zhōng huì sè de jié gòu, chéng gōng fān yuè liǎo jì chéng jī zhì de nǎo rén wèn tí。 lā jī shōu jí jī zhì xiǎn zhù dì tí gāo liǎo shēng chǎn shuài, jiàng dī liǎo fù zá dù。 zài wǎng luò bèi jǐng xià shǐ yòng xū nǐ jī, yǐ jí yòu guān 'ān quán xìng hé dòng tài jiā zài de yī xì liè shè jì xuǎn zé, yíng hé liǎo zhèng zài chū xiàn de xū qiú hé yuàn wàng。 zhè xiē tè xìng shǐ java bù jǐn chéng wéi xiàn yòu chéng xù yuán de xīn wǔ qì, ér qiě yě wéi xīn de chéng xù yuán chuàng zào liǎo fán róng de shì chǎng kōng jiān。
cǐ wài, java yōng yòu yī gè biāo zhǔn huà de、 èr jìn zhì xíng shì de lèi kù, tí gōng liǎo bì yào de( dāng rán bìng fēi chōng fēn de) píng tái yǔ chǎng shāng wú guān xìng。 píng tái yǔ chǎng shāng wú guān xìng yào qiú yī xiàng jì shù bì xū yòu qīng xī de guī fàn, bìng qì nà xiē zǔ 'ài 'èr jìn zhì biāo zhǔn shí shī de tè xìng。 c++ suī rán yòu yī gè iso biāo zhǔn, dàn qí shí shèn zhì duì yú xiāng tóng xì tǒng yǔ xiāng tóng zhǐ lìng tǐ xì de gè gè píng tái, yě tí bù chū yī gè shí yòng de、 gè bǎn běn jiān róng de 'èr jìn zhì biāo zhǔn。
lì shǐ shàng hěn duō shǐ yòng xū nǐ jī de yǔ yán bǎo shòu zénàn, shì yīn wéi qí bù gòu chū sè de xìng néng wèn tí, ér zhè yào guī guò yú huǎn màn de jiě shì qì hé zāo gāo de lā jī shōu jí qì。 java de zǎo qī shí xiàn yě yīn wéi tóng yàng de wèn tí shòu dào yán lì de pī píng。 dàn shì zì nà shí qǐ, yè jiè xiàng xīn de xū nǐ jī shí xiàn jì shù tóu rù liǎo dà liàng zī jīn, qǔ dé liǎo xiǎn zhù de xiào guǒ, rú jīn zài dà bù fēn chǎng hé, java de xìng néng gēn cháng guī de jìng tài biān yì yǔ yán xiāng bǐ háo bù xùn sè。 zhè shǐ dé chéng xù yuán zài huò dé píng tái hé chǎng shāng wú guān xìng de tóng shí, yě bù bì fù chū xìng néng shàng de dài jià。
c++ bìng méi yòu qiáng zhì shǐ yòng miàn xiàng duì xiàng fāng fǎ, yīn cǐ wèile biān xiě chū sè de miàn xiàng duì xiàng dài mǎ, jiù yào qiú chéng xù yuán men yòu xiāng dāng qiáng de jì lǜ xìng。 hěn duō gōng sī jiù shì yīn wéi zhè gè yuán yīn fàng qì liǎo c++。 zuò wéi yǔ yán, java de yī gè tū chū de yōu diǎn jiù shì qiáng zhì miàn xiàng duì xiàng fāng fǎ, bù yǔn xǔ fēi miàn xiàng duì xiàng de jié gòu。
[fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] jiè yú c++ hé java zhī jiān, jiǎo tà liǎng zhǐ chuán, yīn cǐ jì bù gòu 'ān quán, yòu shī zhī fù zá。
duì yú gōng sī lái shuō, cǎi yòng xīn de yǔ yán yào fù chū jù dà dài jià。 gù bù dào hǎo de chéng xù yuán( méi rén shú xī zhè zhǒng xīn yǔ yán), péi xùn fèi yòng gāo dé jīng rén, xué xí guò chéng zhōng shēng chǎn shuài hé chǎn pǐn zhì liàng xià jiàng, duō nián de jīng yàn suí fēng xiāo shì, děng děng。 yī zhǒng yǔ yán rú hé kè fú zhè xiē zhàng 'ài?
lindholm: shuō dé hěn duì, cǎi yòng xīn dōng xī què shí cháng cháng kāi xiāo jù dà。 bù guò wèn tí shì: zhè gè xīn dōng xī shì fǒu néng gòu jié shěng gèng duō de kāi zhī, huò zhě tí gōng jù dà de gǎi jìn, huò qǔ hé lǐ de huí bào? hěn duō gōng sī fā xiàn, zhuànxiàng java jì shù bù lùn zài kāi fā de hòu duān( jìn kuài jìn rù shì chǎng、 kuài sù dié dài kāi fā、 wéi hù jiǎn dān xìng) hái shì qián duān( kuà píng tái fā bù, shì yòng fàn wéi cóng dī duān shè bèi dào gāo duān fú wù qì de jì shù, ān quán xìng), dōunéng jié shěng dà bǐ de kāi xiāo。
duì yú xīn shì wù de jiē nà, cháng cháng shì zài tòng chǔ de yā lì zhī xià。 hěn dà chéng dù shàng, zhè zhèng shì java suǒ jīng lì de。 java de chǎn shēng, shì duì dāng shí hěn duō xì tǒng de quē xiàn suǒ zuò chū de fǎn yìng。 java jì shù tōng guò xià miàn de shǒu duàn jiǎn qīng liǎo kāi fā zhě de tòng chǔ: 1) gù jí liǎo wǎng luò jì suàn fāng miàn de xū qiú, shì yìng yùn 'ér shēng。 2) zài jì shù néng lì de jué zé shàng, bǎo chí liáng hǎo de pǐn wèi, gù jí liǎo dà zhòng de xīn lǐ。 3) cǎi yòng shì dù qiáng zhì xìng cè lüè tuī xíng shè jì jué dìng。 cǐ wài, java jì shù yǐ jīng chéng wéi dà xué jiào xué zhōng de zhù liú, zhè tóng yàng bǎo zhèng liǎo java kāi fā zhě duì wǔ de bù duàn zhuàng dà。
dàn shì zuì zhòng yào de yī diǎn shì, zài méi yòu lìng yī zhǒng chéng xù shè jì jì shù, néng gòu xiàng java nà yàng yǔn xǔ chéng xù yuán kāi fā jī yú internet de bù tóng píng tái zhī shàng de yìng yòng chéng xù。 java píng tái zài zhè fāng miàn de jié chū biǎo xiàn, yǐ jīng bèi dà liàng de shí lì zhèng míng。 java yǐ jīng chéng wéi internet shàng de quē shěng yìng yòng chéng xù píng tái, javaapis yě chéng wéi internet yìng yòng chéng xù kāi fā de tiān rán píng tái。
stroustrup: wēi ruǎnhuo sun bǎ dà bǐ de jīn qián rēng zài java、 vb hé [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] zhōng, bìng bù shì yīn wéi tā liáng xīn fā xiàn, yě bù shì yīn wéi tā men zhēn de xiāng xìn zhè xiē yǔ yán néng gòu dài gěi chéng xù yuán gèng měi hǎo de shēng huó, ér shì lì yì shǐ rán。
yòu yī gè shuō fǎ, rèn wéi ruǎn jiàn gōng jù chǎng shāng rú guǒ néng gòu bǎ yìng yòng chéng xù kāi fā zhě de zhuān yè jì shù rèn wù fù dān qǐ lái, jiāng huò qǔ jù dà de jīng jì lì yì。 wǒ duì qí bèi hòu de jīng jì fēn xī pō wéi huái yí, wǒ rèn wéi zhè hěn nán chéng wéi xiàn shí, tè bié shì dāng yìng yòng chéng xù kāi fā zhě shǐ yòng kāi fàng de、 biāo zhǔn huà de gōng jù shí, tā men kě yǐ yòu duō zhǒng xuǎn zé, cóng 'ér shǐ shàng miàn de xiǎng fǎ gèng jiā bù kě néng。
duō nián yǐ qián, c++ jiù yǐ jīng jù yòu fàn xíng néng lì ( yě jiù shì templates hé stl), yòu yùn suàn fú zhòng zài, yòu méi jǔ lèi xíng? wǒ men huì bù huì zài java de wèi lái bǎn běn zhōng kàn dào zhè xiē tè xìng? java shì bù shì yīnggāi nà rù zhè xiē tè xìng ní?
strousturp: cóng 1988-89 nián qǐ, c++ jiù yǐ jīng yòu liǎo templates。 dàn shì wǒ men huā liǎo bù shàoshí jiān lái liǎo jiě rú hé zuì hǎo dì yùn yòng zhè gè gōng jù, zǎo qī gè chǎng jiā duì yú template de zhī chí zài pǐn zhì shàng yě yòu hěn dà de chā yì。 yòu xiē biān yì qì chǎng shāng dòng zuò chí huǎn, zhì shǎo yòu yī gè zhù yào de biān yì qì chǎng shāng( hǎo xiàng shì zhǐ wēi ruǎn, wēi ruǎn zài visualc++4.0 cái kāi shǐ zhī chí template, zài cǐ zhī qián yī zhí shēng chēng template shì guò yú fù zá 'ér yòu méi shí me yòng de jì shù, shí zhì jīn rì, visualc++ duì yú template de zhī chí zài zhù liú biān yì qì zhōng dū shǔ yú zuì chā de yī dàng héng héng yì zhě zhù) àn zhōng gǔ lì shēng míng lángjí de fǎn template xuān chuán, zhí dào tā men zì jǐ zhōng yú xué huì liǎo zhè xiàng jì shù wéi zhǐ。 zhí dào jīn tiān, duì yú template de zhī chí zài pǐn zhì shàng réng rán yòu dài gǎi jìn。
nǐ shàng miàn tí dào de nà xiē tè xìng, wǒ rèn wéi java( hái yòu c#) yīnggāi, yě kěn dìng huì zhú jiàn yǐn rù。 nà xiē duì yú chéng xù yuán lái shuō zuì yòu yòng de yǔ yán tè xìng hé gài niàn, jiāng huì zhú jiàn jí zhōng, chéng wéi gè jiā zhù liú yǔ yán de bì rán zhī xuǎn。 yě jiù shì shuō, wǒ rèn wéi lèi sì xī gòu hán shù hé múbǎn tè shū huà zhī lèi de jī zhì, yuǎn yuǎn bǐ méi jǔ děng jī zhì zhòng yào dé duō。
lindholm: java jì shù chéng gōng de yuán yīn zhī yī, jiù shì hěn qīng chǔ nǎ xiē bù gāi zuò。 wǒ men dé duō wèn jǐ gè wèishénme: zhè xiàng tè xìng shì bù shì bì bù kě shǎo? zēng jiā tā huì dài lái nǎ xiē kāi xiāo? yùn suàn fú zhòng zài shì c++ zhōng yī xiàng jí qí qiáng dà de tè xìng, dàn shì tā yě dà dà zēng jiā liǎo c++ yǔ yán de fù zá dù, hěn duō réndōu nán yǐ zhāo jià。 java zài gè zhǒng kě néng de quán héng zhī zhōng, zuò chū liǎo míng zhì de jué zé, zhǎo dào liǎo néng lì yǔ xū qiú zhī jiān de wán měi píng héng diǎn。
dāng rán, java yě huì fā zhǎn, ér qiě zuì zhòng yào de shì, xiàn zài shì kāi fā zhě men zài tuī dòng fā zhǎn。 java zēng jiā fàn xíng néng lì zhè jiàn shì, hěn hǎo dì zhǎn shì liǎo java shì rú hé tōng guò zhěng gè kāi fā zhě shè qún de cānyù, zài quán héng zhōng jué dìng zhèng què de píng héng diǎn。 guān yú zēng jiā fàn xíng lèi xíng( generictypes) de“ java guī gé shēn qǐng”( javaspecificationrequest,jsr) yǐ jīng jìn rù jcp( javacommunityprocess) chéng xù, ér qiě yǐ jīng kāi fā liǎo hěn cháng yī duàn shí jiān( cān jiàn http://java.sun.com/aboutjava/communityprocess/ zhī jsr-014)。 xiàn zài, zài jcp zhōng, yòu chāo guò 80 gè jsrs zhèng zài tǎo lùn zhōng, zhè chōng fēn tǐ xiàn liǎo zhěng gè tǐ xì duì kāi fā zhě de jī jí fǎn kuì hé gāo dù hé zuò, zhè zhèng shì qū dòng java píng tái bù duàn jìn huà de dòng lì。
fā zhǎn vs. gé xīn (evolutionvs.revolution)
c++ shì yī zhǒng fā zhǎn xíng de yǔ yán, java hé [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] sì hū gèng xiàng shì gé xīn xíng yǔ yán( tā men shì cóng tóu shè jì de)? shénme shí hòu, gé xīn xíng de yǔ yán cái shì bì xū de ní?
lindholm:java jì shù bìng fēi píng kōng chū shì, fǎn 'ér gèng xiàng shì fā zhǎn xíng de。 java suǒ yòu de tè xìng, zài java píng tái tuī chū zhī qián, dū zhì shǎo yǐ jīng cún zài yú lìng yī zhǒng huán jìng zhī zhōng。 java de gòng xiàn zài yú, zài zhòng duō de tè xìng hé quán héng zhōng, zuò chū liǎo hé lǐ de xuǎn zé, shǐ dé chǎn pǐn jì shí yòng, yòu yōu yǎ。 java jì shù duì yú chéng xù yuán de tài dù shì: fǔ yǎng, dàn bù nì 'ài。
stroustrup: cóng jì shù shàng jiǎng, wǒ bìng bù rèn wéi java hé [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] shì shénme“ cóng tóu shè jì de” gé xīn xíng yǔ yán。 cháng ruò java shì cóng jì shù yuán zé chū fā, cóng tóu shè jì, dà gài jiù bù huì mó fǎng c/c++ nà zhǒng chǒu lòu hé bìng tài de yǔ fǎ liǎo( bù bì jīng yà, stroustrup zài hěn duō chǎng hé biǎo shì guò, c++ cǎi yòng c de yǔ fǎ xíng shì, shí zài shì pò yú jiān róng xìng。 tā běn rén gèng piān 'ài simula de yǔ fǎ héng héng yì zhě)。
wǒ rèn wéi, zhǐ yòu dāng chéng xù yuán men miàn duì de wèn tí fā shēng liǎo gēn běn de biàn huà de shí hòu, huò zhě dāng wǒ men fā xiàn liǎo quán xīn de、 jí qí yōu yuè de chéng xù shè jì jì shù, yòu wán quán bù néng wéi xiàn cún yǔ yán suǒ zhī chí de shí hòu, wǒ men cái xū yào quán xīn de yǔ yán。 wèn tí shì, wǒ men kǒng pà yǒng yuǎn yě pèng bù dào nà xiē“ gēn běn”、“ quán xīn” de qíng kuàng。
wǒ yǐ wéi, zì cóng oop wèn shì yǐ lái, kě chēng wéi“ gēn běn” de xīn xíng chéng xù shè jì jì shù, wéi yòu fàn xíng chéng xù shè jì( genericprogramming) hé shēng chéng shì chéng xù shè jì( generativeprogramming) jì shù, zhè liǎng xiàng jì shù zhù yào shì yuán yú c++templates jì shù de yùn yòng, yě yòu yī bù fēn céng jīng bèi shì wéi miàn xiàng duì xiàng hé hán shù shì yǔ yán (functionallanguages) de cì yào chéngfèn, xiàn zài dū biàn chéng zhèng shì、 kě yòng hé kě chéng shòu de jì shù liǎo。 wǒ duì yú mù qián c++ múbǎn (template) chéng xù shè jì de chéng guǒ fēi cháng xīng fèn。 lì rú, xiàng pooma,blitz++ hé mtl děng chéng xù kù, zài hěn duō dì fāng gǎi biàn liǎo shù zhí jì suàn de fāng shì。
java hé [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] de yī gè“ mài diǎn”, jiù shì tā men de jiǎn dān xìng。 xiàn zài java shì bù shì kuài shī qù zhè gè mài diǎn liǎo?
stroustrup: xīn yǔ yán zǒng shì xuān chēng zì jǐ rú hé rú hé jiǎn dān, duì lǎo yǔ yán de fù zá xìng pō duō fēi yì。 qí shí zhè zhǒng suǒ wèi de“ jiǎn dān xìng”, jiǎn dān dì shuō, jiù shì bù chéng shú xìng。 yǔ yán de fù zá xìng, shì zài jiě jué xiàn shí shì jiè zhōng jí wéi fán suǒ hé tè shū de fù zá wèn tí de guò chéng zhōng zhú jiàn zēng jiā de。 yī gè yǔ yán zhǐ yào huó de shí jiān gòu cháng, zǒng huì yòu mǒu xiē dì fāng zhú jiàn fù zá qǐ lái, huò zhě shì yǔ yán běn shēn, huò zhě shì chéng xù kù hé gōng jù。 c++ hé java xiǎn rán dōubù lì wài, wǒ kàn [fontid=markstyle="color:#ee6600;background-color:yellow"]c#[/font] yě yī yàng。 rú guǒ yī zhǒng yǔ yán néng gòu dù guò zì jǐ de yòu nián shí dài, tā huì fā xiàn, zì jǐ wú lùn shì tǐ jī hái shì fù zá xìng dōudà dà zēng jiā liǎo。
lindholm: java jì shù dídí gōng néng zài zēng jiā, xū yào xué xí de dōng xī yě zài zēng jiā。 bù guò gōng néng de zēng jiā bìng bù yī dìng dài lái fù zá xìng de zēng jiā。 java jì shù de fā zhǎn, bìng méi yòu shǐ xué xí qū xiàn gèng jiā dǒu qiào, zhǐ shì ràng tā jì xù xiàng yòu fāng yán zhǎn liǎo。
biāo zhǔn
biāo zhǔn huà yǔ yán hé kāi fàng xíng yǔ yán gè zì de yōu diǎn hé quē diǎn hé zài?
lindholm: duì yú yī gè kāi fàng、 bù yǔn xǔ zhuān yòu kuò zhǎn、 jù yòu quán wēi de qiáng zhì xìng biāo zhǔn yǔ yán huò zhě yùn xíng huán jìng lái shuō, bù cún zài shénme quē diǎn。 yǔn xǔ zhuān yòu kuò zhǎn jiù yì wèi zhe yǔn xǔ chǎng shāng xià tào zǐ bǎng jià kè hù。 tè bié zhòng yào de shì, bì xū ràng zhěng gè píng tái, ér bù zhǐ shì qí zhōng yī bù fēn wán quán biāo zhǔn huà, cái néng dù jué chǎng shāng men lì yòng gāo céng cì de zhuān yòu api xià tào zǐ。 kè hù yào qiú yòu xuǎn zé chǎng shāng de zì yóu, tā men jì yào yòu chuàng zào xìng, yòu xū yào jiān róng xìng。
stroustrup: duì yú yī gè yǔ yán, rú c/c++ lái shuō, jiàn lì zhèng shì biāo zhǔn( rú iso biāo zhǔn) zuì dà de hǎo chù, zài yú kě yǐ fáng zhǐ mǒu yī gè chǎng shāng cāo zòng zhè zhǒng yǔ yán, bǎ tā dàngchéng zì jǐ de yáo qián shù。 duō gè chǎng shāng de jìng zhēng gěi yòng hù dài lái de shì jiào dī de jià wèi hé jiào hǎo de wěn dìng xìng。
zhuān yòu yǔ yán de hǎo chù, yī shì liú xíng, èr shì piányí( bù guò děng nǐ bèi tào láo liǎo zhī hòu, qíng kuàng jiù huì qǐ biàn huà), sān shì duì yú shāng yè xìng xū qiú kě yǐ zuò chū kuài sù de fǎn yìng。
biāo zhǔn huà yǔ yán de tè diǎn zhī yī shì, tā bù néng hū lüè tè shū yòng hù de xū qiú。 bǐ rú wǒ zài at&t zhōng suǒ kǎo lǜ de dōng xī, qí guī mó、 kě kào xìng hé xiàolǜ yào qiú, gēn nà xiē pǔ tōng chǎng shāng guān zhù de dà zhòng ruǎn jiàn xiāng bǐ, gēn běn bù kě tóng rì 'ér yǔ。 nà xiē gōng sī hěn zì rán zhǐ guān zhù zhù yào de xū qiú。
rán 'ér, duō shù dà jī gòu hé shēn chù qián yán de gōng sī, dōuyòu zhe tè shū de xū qiú。 c++ de shè jì shì kāi fàng、 líng huó hé gāo xiào de, néng gòu mǎn zú wǒ suǒ néng xiǎng xiàng de rèn hé xū qiú。 gēn qí tā de xiàn dài yǔ yán xiāng bǐ, c++ de jiāzhǎng shì zuò fēng kě wèi shǎo zhī yòu shǎo, yuán yīn jiù zài zhè。 dāng rán, bù néng zàn shǎng zhè yī diǎn de rén huì gòu bìng c++ de“ wēi xiǎn”。
yōng yòu zhèng shì hé kāi fàng biāo zhǔn de yǔ yán zhù yào shì wéi biān chéng gōng jù de shǐ yòng zhě hé kè hù fú wù de, ér yōng yòu zhuān shǔ“ biāo zhǔn” de yǔ yán, zhù yào shì wéi chǎng shāng fú wù de。
xiāng guān cí tiáo: aop |
|
oop de xǔ duō yuán shǐ sī xiǎng dōulái zhī yú Simula yǔ yán, bìng zài Smalltalk yǔ yán de wán shàn hé biāo zhǔn huà guò chéng zhōng dé dào gèng duō de kuò zhǎn hé duì yǐ qián de sī xiǎng de chóngxīn zhù jiě。 kě yǐ shuō OO sī xiǎng hé oopL jīhū shì tóng bù fā zhǎn xiāng hù cù jìn de。 yǔ hán shù shì chéng xù shè jì( functional-programming) hé luó ji shì chéng xù shè jì( logic-programming) suǒ dài biǎo de jiē jìn yú jī qì de shí jì jì suàn mó xíng suǒ bù tóng de shì, oop jīhū méi yòu yǐn rù jīng què de shù xué miáo xù, ér shì qīng xiàng yú jiàn lì yī gè duì xiàng mó xíng, tā néng gòu jìn sì de fǎn yìng yìng yòng lǐng yù nèi de shí tǐ zhī jiān de guān xì, qí běn zhì shì gèng jiē jìn yú yī zhǒng rén lèi rèn zhī shì wù suǒ cǎi yòng de zhé xué guān de jì suàn mó xíng。 yóu cǐ, dǎo zhì liǎo yī gè zì rán de huà tí, nà jiù shì oop dào dǐ shì shénme? [D&T1988][B.S1991].。 zài oop zhōng, duì xiàng zuò wéi jì suàn zhù tǐ, yōng yòu zì jǐ de míng chēng, zhuàng tài yǐ jí jiē shòu wài jiè xiāo xī de jiē kǒu。 zài duì xiàng mó xíng zhōng, chǎn shēng xīn duì xiàng, jiù duì xiàng xiāo huǐ, fā sòng xiāo xī, xiǎng yìng xiāo xī jiù gòu chéng oop jì suàn mó xíng de gēn běn。
duì xiàng de chǎn shēng yòu liǎng zhǒng jī běn fāng shì。 yī zhǒng shì yǐ yuán xíng( prototype) duì xiàng wéi jī chǔ chǎn shēng xīn de duì xiàng。 yī zhǒng shì yǐ lèi( class) wéi jī chǔ chǎn shēng xīn duì xiàng。 yuán xíng de gài niàn yǐ jīng zài rèn zhī xīn lǐ xué zhōng bèi yòng lái jiě shì gài niàn xué xí de dì zēng tè xìng, yuán xíng mó xíng běn shēn jiù shì qǐ tú tōng guò tí gōng yī gè yòu dài biǎo xìng de duì xiàng wéi jī chǔ lái chǎn shēng gè zhǒng xīn de duì xiàng, bìng yóu cǐ jì xù chǎn shēng gèng fú hé shí jì yìng yòng de duì xiàng。 ér yuán xíng - wěi tuō yě shì oop zhōng de duì xiàng chōu xiàng, dài mǎ gòng xiǎng jī zhì zhōng de yī zhǒng。 yī gè lèi tí gōng liǎo yī gè huò zhě duō gè duì xiàng de tōng yòng xìng miáo xù。 cóng xíng shì huà de guān diǎn kàn, lèi yǔ lèi xíng yòu guān, yīn cǐ yī gè lèi xiāng dāng yú shì cóng gāi lèi zhōng chǎn shēng de shí lì de jí hé。 ér zhè yàng de guān diǎn yě huì dài lái yī xiē máo dùn, bǐ jiào diǎn xíng de jiù shì zài jì chéng tǐ xì xià, zǐ jí( zǐ lèi) duì xiàng hé fù jí( fù lèi) duì xiàng zhī jiān de xíng wéi xiāng róng xìng kě néng hěn nán dá dào, zhè yě jiù shì oop zhōng cháng bèi yǐn yòng de --- zǐ lèi xíng( subtype) bù děng yú zǐ lèi( subclass) [Budd2002]。 ér zài yī zhǒng suǒ yòu jiē duì xiàng de shì jiè guān bèi jǐng xià, zài lèi mó xíng jī chǔ shàng hái dàn shēng chū liǎo yī zhǒng yōng yòu yuán lèi( metaclass) de xīn duì xiàng mó xíng。 jí lèi běn shēn yě shì yī zhǒng qí tā lèi de duì xiàng。 yǐ shàng sān zhǒng gēn běn bù tóng de guān diǎn gè zì dìng yì liǎo sān zhǒng jī yú lèi( class-based) , jī yú yuán xíng( prototype-based) hé jī yú yuán lèi( metaclass-based) de duì xiàng mó xíng。 ér zhè sān zhǒng duì xiàng mó xíng yě jiù dǎo zhì liǎo xǔ duō bù tóng de chéng xù shè jì yǔ yán( rú guǒ wǒ men zàn shí bǎ jìng tài yǔ dòng tài de chā bié fàng zài yī biān)。 shì de, wǒ men jīng cháng jiē chù de C++,Java dōushì shǐ yòng jī yú lèi de duì xiàng mó xíng, dàn chú cǐ zhī wài hái yòu hěn duō wǒ men suǒ méi yòu jiē chù de oopL cǎi yòng liǎo wán quán bù yī yàng de duì xiàng mó xíng, tā men shì zài yòng lìng wài yī zhǒng guān diǎn quán shì oop de nèi hán。
shénme shì oop de jī běn sī xiǎng ní? bǎ zǔ jiàn de shí xiàn hé jiē kǒu fēn kāi, bìng qiě ràng zǔ jiàn jù yòu duō tài xìng。 bù guò, liǎng zhě hái shì yòu gēn běn de bù tóng。 oop qiáng diào zài chéng xù gòu zào zhōng yǔ yán yào sù de yǔ fǎ。 nǐ bì xū dé jì chéng, shǐ yòng lèi, shǐ yòng duì xiàng, duì xiàng chuán dì xiāo xī。 gp bù guān xīn nǐ jì chéng huò shì bù jì chéng, tā de kāi duān shì fēn xī chǎn pǐn de fēn lèi, yòu xiē shénme zhǒng lèi, tā men de xíng wéi rú hé。 jiù shì shuō, liǎng jiàn dōng xī xiāng děng yì wèi zhe shénme? zěn yàng zhèng què dì dìng yì xiāng děng cāo zuò? bù dān dān shì xiāng děng cāo zuò nà me jiǎn dān, nǐ wǎng shēn chù fēn xī jiù huì fā xiàn“ xiāng děng” zhè gè yī bān guān niàn yì wèi zhe liǎng gè duì xiàng bù fēn, huò zhě zhì shǎo jī běn bù fēn shì xiāng děng de, jù cǐ wǒ men jiù kě yǐ yòu yī gè tōng yòng de xiāng děng cāo zuò。 zài shuō duì xiàng de zhǒng lèi。 jiǎ shè cún zài yī gè shùn xù xù liè hé yī zǔ duì yú shùn xù xù liè de cāo zuò。 nà me zhè xiē cāo zuò de yǔ yì shì shénme? cóng fù zá dù quán héng de jiǎo dù kàn, wǒ men yīnggāi xiàng yòng hù tí gōng shénme yàng de shùn xù xù liè? gāi zhǒng xù liè shàng cún zài nà xiē cāo zuò? nà zhǒng pái xù shì wǒ men xū yào de? zhǐ yòu duì zhè xiē zǔ jiàn de gài niàn xíng fēn lèi gǎo qīng chǔ liǎo, wǒ men cái néng tí dào shí xiàn de wèn tí: shǐ yòng múbǎn、 jì chéng hái shì hóng? shǐ yòng shénme yǔ yán hé jì shù? gp de jī běn guān diǎn shì bǎ chōu xiàng de ruǎn jiàn zǔ jiàn hé tā men de xíng wéi yòng biāo zhǔn de fēn lèi xué fēn lèi, chū fā diǎn jiù shì yào jiàn zào zhēn shí de、 gāo xiào de hé bù qǔ jué yú yǔ yán de suàn fǎ hé shù jù jié gòu。 dāng rán zuì zhōng de zài tǐ hái shì yǔ yán, méi yòu yǔ yán méi fǎ biān chéng。 stl shǐ yòng c++, nǐ yě kě yǐ yòng ada lái shí xiàn, yòng qí tā de yǔ yán lái shí xiàn yě xíng, jiēguǒ huì yòu suǒ bù tóng, dàn jī běn de dōng xī shì yī yàng de。 dào chù dōuyào yòng dào 'èr fēn chá zhǎo hé pái xù, ér zhè jiù shì rén men zhèng zài zuò de。 duì yú róng qì de yǔ yì, bù tóng de yǔ yán huì dài lái qīng wēi de bù tóng。 dàn shì jī běn de qū bié hěn qīng chǔ shì gp suǒ yǐ cún de yǔ yì, yǐ jí yǔ yì fēn jiě。 lì rú, wǒ men jué dìng xū yào yī gè zǔ jiàn swap, rán hòu zhǐ chū zhè gè zǔ jiàn zài bù tóng de yǔ yán zhōng rú guǒ gōng zuò。 xiǎn rán zhòng diǎn shì yǔ yì yǐ jí yǔ yì fēn lèi。 ér oop suǒ qiáng diào de( wǒ rèn wéi shì guòfèn qiáng diào de) shì qīng chǔ de dìng yì lèi zhī jiān de céng cì guān xì。 oop gào sù liǎo nǐ rú hé jiàn lì céng cì guān xì, què méi yòu gào sù nǐ zhè xiē guān xì de shí zhì。
( zhè duàn bù tài hǎo lǐ jiě, yòu yī xiē shù yǔ kě néng yào guò yī duàn shí jiān cái huì yòu hé shì de zhōng wén fān yì héng héng yì zhě)
miàn xiàng duì xiàng de biān chéng fāng fǎ oop shì jiǔ shí nián dài cái liú xíng de yī zhǒng ruǎn jiàn biān chéng fāng fǎ。 tā qiáng diào duì xiàng de“ chōu xiàng”、“ fēng zhuāng”、“ jì chéng”、“ duō tài”。 wǒ men jiǎng chéng xù shè jì shì yóu“ shù jù jié gòu” +“ suàn fǎ” zǔ chéng de。 cóng hóng guān de jiǎo dù jiǎng, oop xià de duì xiàng shì yǐ biān chéng wéi zhōng xīn de, shì miàn xiàng chéng xù de duì xiàng。 wǒ men jīn tiān yào jiǎng de OOD shì miàn xiàng xìn xī de duì xiàng, shì yǐ yòng hù xìn xī wéi zhōng xīn de。 |
|
miàn xiàng duì xiàng jì shù zuì chū shì cóng miàn xiàng duì xiàng de chéng xù shè jì kāi shǐ de, tā de chū xiàn yǐ 60 nián dài simula yǔ yán wéi biāo zhì。 80 nián dài zhōng hòu qī, miàn xiàng duì xiàng chéng xù shè jì zhú jiàn chéng shú, bèi jì suàn jī jiè lǐ jiě hé jiē shòu, rén men yòu kāi shǐ jìn yī bù kǎo lǜ miàn xiàng duì xiàng de kāi fā wèn tí。 zhè jiù shì jiǔ shí nián dài yǐ MicrosoftVisual xì liè oop ruǎn jiàn de liú xíng de bèi jǐng。
chuán tǒng de jié gòu huà fēn xī yǔ shè jì kāi fā fāng fǎ shì yī gè xiàn xìng guò chéng, yīn cǐ, chuán tǒng de jié gòu huà fēn xī yǔ shè jì fāng fǎ yào qiú xiàn shí xì tǒng de yè wù guǎn lǐ guī fàn, chǔlǐ shù jù qí quán, yòng hù néng quán miàn wán zhěng dì qí yè wù xū qiú。
chuán tǒng de ruǎn jiàn jié gòu hé shè jì fāng fǎ nán yǐ shì yìng ruǎn jiàn shēng chǎn zì dòng huà de yào qiú, yīn wéi tā yǐ guò chéng wéi zhōng xīn jìn xíng gōng néng zǔ hé, ruǎn jiàn de kuò chōng hé fù yòng néng lì hěn chā。
duì xiàng shì duì xiàn shí shì jiè shí tǐ de mó nǐ, yīn miàn néng gèng róng yì dì lǐ jiě xū qiú, jí shǐ yòng hù hé fēn xī zhě zhī jiān jù yòu bù tóng de jiào yù bèi jǐng hé gōng zuò tè diǎn, yě kě hěn hǎo dì gōu tōng。
qū bié miàn xiàng duì xiàng de kāi fā hé chuán tǒng guò chéng de kāi fā de yào sù yòu: duì xiàng shí bié hé chōu xiàng、 fēng zhuāng、 duō tài xìng hé jì chéng。
duì xiàng (Object) shì yī gè xiàn shí shí tǐ de chōu xiàng, yóu xiàn shí shí tǐ de guò chéng huò xìn xī shēng lái dìng yì。 yī gè duì xiàng kě bèi rèn wéi shì yī gè bǎ shù jù( shǔ xìng) hé chéng xù( fāng fǎ) fēng zhuāng zài yī qǐ de shí tǐ, zhè gè chéng xù chǎn shēng gāi duì xiàng de dòng zuò huò duì tā jiē shòu dào de wài jiè xìn hào de fǎn yìng。 zhè xiē duì xiàng cāo zuò yòu shí chēng wéi fāng fǎ。 duì xiàng shì gè dòng tài de gài niàn , qí zhōng de shǔ xìng fǎn yìng liǎo duì xiàng dāng qián de zhuàng tài。
lèi (Class) yòng lái miáo shù jù yòu xiāng tóng de shǔ xìng hé fāng fǎ de duì xiàng de jí hé。 tā dìng yì liǎo gāi jí hé zhōng měi gè duì xiàng suǒ gòng yòu de shǔ xìng hé fāng fǎ。 duì xiàng shì lèi de shí lì。
yóu shàng fēn xī bù nán kàn chū, jìn guǎn oop jì shù gèng kàn zhōng yòng hù de duì xiàng mó xíng, dàn qí mùdì dōushì yǐ biān chéng wéi mù de de, ér bù shì yǐ yòng hù de xìn xī wéi zhōng xīn de, zǒng xiǎng bǎ yòng hù de xìn xī nà rù dào mǒu gè yòng hù bù gǎn xīng qù de“ chéng xù duì xiàng” zhōng。 |
|
· oop de yōu diǎn: shǐ rén men de biān chéng yǔ shí jì de shì jiè gèng jiā jiē jìn, suǒ yòu de duì xiàng bèi fù yú shǔ xìng hé fāng fǎ, jiēguǒ biān chéng jiù gèng jiā fù yòu rén xìng huà。
·oop de yě yòu quē diǎn, jiù C++ ér yán, yóu yú miàn xiàng gèng gāo de luó ji chōu xiàng céng, shǐ dé C++ zài shí xiàn de shí hòu, bù dé bù zuò chū xìng néng shàng miàn de xī shēng, yòu shí hòu shèn zhì shì zhì mìng de ( suǒ yòu duì xiàng de shǔ xìng dū jīng guò nèi zhì duō zhòng zhǐ zhēn de jiànjiē yǐn yòng shì qí xìng néng sǔn shī de zhù yào yuán yīn zhī yī; bù guò, bǐ zhě de jú xiàn xìng zài yú wèi shǐ yòng guò VC++ wài de miàn xiàng duì xiàng yǔ yán, suǒ yǐ bù shì shí fēn kěn dìng, hā hā, yòu rén xiào chū lái liǎo… )。
zài jì suàn jī sù dù fēi sù fā zhǎn de jīn tiān, nǐ kě néng huì shuō, yī dīng diǎn de xìng néng xī shēng méi shí me dà bù liǎo。 shì de, cóng miàn xiàng duì xiàng de jiǎo dù, shǐ de biān chéng de jié gòu gèng jiā qīng xī wán zhěng, shù jù gèng jiā dú lì hé yì yú guǎn lǐ, xìng néng de xī shēng kě yǐ dài lái zhè me duō de hǎo chù, méi yòu lǐ yóu bù zuò wěn zuàn de shēng yì bā?
bù guò, zài mǒu xiē duì sù dù yào qiú jí gāo tè shū chǎng hé, lì rú nǐ zuò de shì diàn xìn de jiāo huàn xì tǒng, měi miǎo zhōng yòu chāo guò bǎi wàn de rén tóng shí jìn xíng diàn huà jiāo huàn, rú guǒ, měi yī gè shù jù jiāo huàn guò chéng dōushì yī gè duì xiàng, nà me zǒng de xìng néng sǔn shī jiāng shì tiān wén shù zì!!
huò zhě zhè gè lì zǐ bù gòu tiē shēn, zài jǔ gè lì zǐ bā。 jiǎ rú nǐ shòu pìn yú yī gè yóu xì shè jì gōng sī, lǎo bǎn xī wàng zuò chū lái de yóu xì kě yǐ gèng duō de jiān gù dào gèng duō de diàn nǎo shǐ yòng zhě, yóu xì měi miǎo zhōng de yùn xíng de zhēn kě yǐ gèng duō, zǐ dàn hé bào zhà wù kě yǐ gèng duō、 gèng huá lì。 nà me, nǐ huì fā xiàn shǐ yòng C++ huì shǐ nǐ de chéng xù biàn dé bèn zhuō, wú fǎ mǎn zú nǐ de xū qiú, chú fēi nǐ fēi dé yào nǐ de yóu xì yùn xíng yú bēn téng sì de jī qì shàng ( rú guǒ bù shì, ér nǐ yòu jiān chí yòng C++ de duì xiàng biān chéng, nà me qǐng jiǎn shǎo zhùjué de qiāng de wēi lì bā )。
rú guǒ nǐ shì míng wán bù níng de rén, nǐ shuō bù xiāng xìn oop huì yòu xìng néng shàng de sǔn shī, nà me, wǒ jì dé céng kàn dào zài CSDN shàng guān yú VB hé VC zhí xíng xiàolǜ de tǎo lùn de wén zhāng, jiǎng shù de jiù shì shǐ yòng liǎo MFC yǐ hòu, zhí xíng xiàolǜ shèn zhì dī yú VB kāi fā chū lái de dōng xī。 qǐng gè wèi yàn zhèng yī xià: rú guǒ shǐ yòng de shì chún cuì de C yǔ yán yǔ fǎ de huà, nà me yī dìng huì bǐ zài VB biān chū lái de dōng xī yào kuài hěn duō (GetTickCount hán shù kě yǐ chá yuè MSDN, rú guǒ xiǎng gèng jiā jīng què yī xiē, kě yǐ shǐ yòng QueryPerformanceCounter hán shù )。 |
|
( zhuàn wén /BjarneStroustrup&TimLindholm biān yì / mèng yán)
zài wèi lái sān nián, chéng xù yuán biān xiě dài mǎ de fāng shì huì fā shēng nà xiē biàn huà?
Stroustrup: zài C++ zhōng, jiǎ rú méi yòu hé shì de kù zài bèi hòu zhī chēng, wán chéng rèn hé zhòng yào de gōng zuò dōukě néng shì hěn fù zá de。 ér yī dàn yòu liǎo hé shì de kù, rèn hé dōng xī dōukě yǐ bèi wǒ men cāo kòng yú gǔ zhǎng zhī jiān。 yīn cǐ, gòu zào hé shǐ yòng chéng xù kù de zhòng yào xìng yǔ rì jù zēng。 zhè yě 'àn shì wǒ men, fàn xíng chéng xù shè jì (genericprogramming) jiāng huì yuè lái yuè duō dì bèi yùn yòng。 zhǐ yòu tōng guò GP, wǒ men cái néng què bǎo kù de tōng yòng xìng hé gāo xiàolǜ。 wǒ hái yù qī zài fēn bù shì jì suàn hé“ zǔ jiàn( components)” yìng yòng lǐng yù huì chū xiàn xǐ rén de zēngzhǎng。 jiù dà bù fēn chéng xù yuán 'ér yán, tōng guò shǐ yòng fāng biàn shì yòng de chéng xù kù, zhè xiē kāi fā gōng zuò huì biàn dé jiǎn dān míng liǎo。
xiàn zài yòu yī gè qū shì, biān yì qì chǎng shāng shì tú bǎ qí tè yòu de“ duì xiàng mó xíng” hé tú xíng jiè miàn (GUI) xì jié tuī xiāo gěi yòng hù。 bǐ rú wēi ruǎn de COM hé Inprise de lèi shǔ xìng“ properties”。 duì yú yòng hù lái shuō, zhè jì bù bì yào, yě bù qíng yuàn。 wǒ suǒ xī wàng kàn dào de chéng xù kù, yīnggāi shì yòng biāo zhǔn C++ dǎ zào, jiè miàn líng huó, zhí dé xìn lài de chéng xù kù。 tōng cháng, zhè xiē jiè miàn yīnggāi shì píng tái wú guān de。 C++ de biǎo dá néng lì jí qiáng, jí shǐ bù shǐ yòng dà liàng de hóng, yě yìng gāi zú yǐ dá chéng zhè yī yào qiú。 jiù suàn yòu xiē dì fāng wú fǎ bǎi fēn zhī bǎi de zūn shǒu zhè yī yuán zé, yě yìng gāi jiāng duì yú píng tái hé chǎng jiā de yǐ lài xìng xiàn zhì qǐ lái。 zhè gè mù biāo de wán chéng qíng kuàng, kě yǐ fǎn yìng ruǎn jiàn gōng jù chǎn yè duì yú yìng yòng chéng xù kāi fā hángyè de guān zhù chéng dù。 wǒ huái yí mù qián duì yú nà xiē dú lì de、 kuà píng tái chǎng shāng lái shuō, bìng bù cún zài xiāng yìng de shì chǎng。 rú guǒ néng gòu jiàn lì zhè yàng de shì chǎng, yě xǔ néng gòu cù jìn chǎng shāng men wéi kè hù zuò chū“ zhēn zhèng yòu yòng de” chǎn pǐn。
Lindholm: duì yú biān xiě dài mǎ de kāi fā zhě lái shuō, zhù yào de qū dòng lì liàng réng jiāng shì liǎng gè: wǎng luò hé fēn bù shì héng héng yě jiù shì shè jì hé kāi fā fēi dān jī ruǎn jiàn de xū qiú。 dà bù fēn de yìng yòng chéng xù jiāng bù huì shì gū líng líng dì yùn xíng zài dān yī shè bèi shàng, ér shì yùn yòng liǎo lèi sì EJB hé JSP zhī lèi jì shù de, píng tái wú guān de fēn bù shì chéng xù。 chéng xù yuán men jiāng bù dé bù miàn duì fēn bù shì jì suàn de chóngchóng xiǎn zǔ。 zhè jiāng duì xǔ duō chéng xù yuán suǒ yǐ lài de shè jì mó shì、 jì shù hé zhí jué gòu chéng yán jùn de tiǎo zhàn。 zhè shì xuǎn zé biān chéng yǔ yán zhī qián bì xū rèn shí dào de, jìn guǎn bù tóng yǔ yán de shè jì tè xìng kě néng cù jìn huò zhě zǔ 'ài zhè yī zhuǎn huà。
zài wǎng luò yìng yòng de zēng cháng zhōng, yī gè hěn zhòng yào de bù fēn shì xiǎo xíng yí dòng shè bèi hé tè shū Internet shè bèi de bào zhà xìng zēngzhǎng。 zhè xiē shè bèi gè yòu gè de cāo zuò xì tǒng, huò zhě zhǐ zài mǒu zhǒng tè dìng de shè bèi lǐng yù nèi yòu gòng tóng de cāo zuò xì tǒng。 wǒ men xiàn zài hái kě yǐ yī yī liè jǔ chū zhè xiē shè bèi héng héng jiā tíng jiē rù shè bèi、 fēng wō diàn huà、 diàn zǐ bào zhǐ、 PDA、 zì dòng wǎng luò shè bèi děng děng。 dàn shì zhè xiē shè bèi lǐng yù de shù liàng hé shēn rù chéng dù jiāng huì hěn kuài biàn dé nán yǐ gūliáng。 wǒ mendōu zhī dào zhè gè shì chǎng dà dé jīng rén, PC de xīng qǐ yǔ zhī xiāng bǐ bù guò xiǎo cài yī dié。 yīn cǐ zài zhè xiē shè bèi de yìng yòng chéng xù shì chǎng shàng, jìng zhēng jiāng huì xiāng dāng cán kù。 huò shèng de zhòng yào shǒu duàn zhī yī, jiù shì jìn kuài jìn rù shì chǎng。 kāi fā rén yuán xū yào yōu xiù de gōng jù, xùn sù gāo xiào dì zhuàn xiě hé diào shì tā men de ruǎn jiàn。 píng tái wú guān xìng yě shì zhì shèng mì jué zhī yī, tā shǐ dé chéng xù yuán néng gòu kāi fā chū zhī chí duō zhǒng shè bèi píng tái de ruǎn jiàn。
wǒ yù qī de lìng yī gè biàn huà shì, wǒ men duì yú dài mǎ (Java) hé shù jù (XML) xié tóng xíng yìng yòng chéng xù de kāi fā néng lì jiāng huì bù duàn tí gāo。 zhè zhǒng xié tóng shì kāi fā qiáng dà yìng yòng chéng xù de hé xīn mù biāo zhī yī。 wǒ men cóng XML de xùn sù liú xíng hé ebXML guī fàn de jìn zhǎn zhōng, yǐ jīng kàn dào liǎo zhè gè qū shì。 ebXML shì yī gè zhēn duì diàn zǐ shāng wù hé guó jì mào yì de, jī yú XML de kāi fàng shì jī chǔ gòu jià, yóu lián hé guó mào yì cù jìn hé diàn zǐ shāng wù zhōng xīn (UN/CEFACT) yǔ jié gòu xìng xìn xī biāo zhǔn tuī jìn zǔ zhì (OASIS) gòng tóng kāi fā。
wǒ men néng fǒu qī wàng chū xiàn yī gè zhēn zhèng de miàn xiàng zǔ jiàn (component-oriented) de yǔ yán? tā de chuàng zào zhě huì shì shuí ní?
Stroustrup: wǒ huái yí, zhè gè lǐng yù zhōng zhī suǒ yǐ quē fá chéng guǒ, zhèng shì yīn wéi rén men héng héng zhù yào shì nà xiē fēi chéng xù yuán men héng héng duì“ zǔ jiàn” zhè gè yì yì hán hú de zì yǎn jì yú liǎo tài duō de qī wàng。 zhè xiē rén shì mèng xiǎng, yòu cháo yī rì, zǔ jiàn huì yǐ mǒu zhǒng fāng shì bǎ chéng xù yuán gǎn chū lì shǐ wǔ tái。 yǐ hòu nà xiē chènzhí de“ shè jì yuán” zhǐ xū lì yòng yù xiān tiáozhěng hǎo de zǔ jiàn, bǎ shǔ biāo tuō yī tuō fàng yī fàng, jiù bǎ xì tǒng zǔ hé chū lái。 duì yú ruǎn jiàn gōng jù chǎng shāng lái shuō, zhè zhǒng xiǎng fǎ hái yòu lìng yī céng yì yì, tā men rèn wéi, dào shí hòu zhǐ yòu tā men cái bǎo liú yòu bì yào de jì shù, yòu néng lì biān xiě zhè yàng de zǔ jiàn。
zhè zhǒng xiǎng fǎ yòu yī gè zuì jī běn de miù wù: zhè zhǒng zǔ jiàn hěn nán huò dé guǎng fàn huān yíng。 yī gè dān dú de zǔ jiàn huò kuàng jià (framework), rú guǒ néng gòu mǎn zú yī gè yìng yòng chéng xù huò zhě yī gè chǎn yè lǐng yù duì suǒ tí chū de dà bù fēn yào qiú de huà, duì yú qí zhì zào zhě lái shuō jiù shì huá suàn de chǎn pǐn, ér qiě jì shù shàng yě bù shì hěn kùn nán。 kě shì gāi chǎn yè nèi de jǐ gè jìng zhēng zhě hěn kuài jiù huì fā xiàn, rú guǒ suǒ yòu réndōu cǎi yòng zhè xiē zǔ jiàn, nà me bǐ cǐ zhī jiān de chǎn pǐn jiù huì biàn dé tiān xià dà tóng, méi shí me qū bié, tā men jiāng lún wéi jiǎn dān de bàn shì yuán, zhù yào lì rùn dū jiāng zuàn jìn nà xiē zǔ jiàn / kuàng jià gōng yìng shāng de yāo bāo lǐ!
xiǎo“ zǔ jiàn” hěn yòu yòng, bù guò chǎn shēng bù liǎo yù qī de gàng gān xiào yìng。 zhōng xíng de、 gèng tōng yòng de zǔ jiàn fēi cháng yòu yòng, dàn shì gòu zào shí xū yào fēi tóng xún cháng de tánxìng。
zài C++ zhōng, wǒ men zōng hé yùn yòng bù tóng gòng xiǎng xíng shì de lèi tǐ xì (classhierarchies), yǐ jí shǐ yòng templates jīng xīn dǎ zào de jiē kǒu, zài zhè fāng miàn qǔ dé liǎo yī dìng de jìn zhǎn。 wǒ qī dài zài zhè gè lǐng yù qǔ dé yī xiē yòu qù hé yòu yòng de chéng guǒ, bù guò wǒ rèn wéi zhè zhǒng chéng guǒ hěn kě néng shì yī zhǒng xīn de C++ chéng xù shè jì fēng gé, ér bù shì yī zhǒng xīn de yǔ yán。
Lindholm: biān xiě miàn xiàng zǔ jiàn de yìng yòng chéng xù, hǎo xiàng gèng duō de shì gè tóu zī、 shè jì hé chéng xù yuán guǎn lǐ fāng miàn de wèn tí, ér bù shì yī gè biān chéng yǔ yán wèn tí。 dāng rán mǒu xiē yǔ yán zài zhè fāng miàn jù yòu xiān tiān yōu shì, bù guò rú guǒ shuō yòu shénme mó shù bān de xīn yǔ yán néng gòu dà dà jiǎn huà zǔ jiàn de biān xiě nán dù, nà chún cuì shì yī zhǒng wù dǎo。
wēi ruǎn yǐ jīng jiāng quán bù dǔ zhù yā zài C# shàng, qí tā yǔ yán hé qù hé cóng?
Stroustrup:C++ zài xià yī gè shí nián lǐ réng rán jiāng shì yī zhǒng zhù liú yǔ yán。 miàn duì xīn de tiǎo zhàn, tā huì fèn qǐ yìng duì。 yī gè chuàng zào liǎo nà me duō chū sè xì tǒng de yǔ yán, jué bù huì“ zuò shì luò huā liú shuǐ chūn qù yě”。
wǒ xī wàng wēi ruǎn rèn shí dào, tā zài C++( wǒ zhǐ de shì ISO biāo zhǔn C++) shàng yòu zhe jù dà de lì yì, C++ shì tā yǔ IT shì jiè nèi qí tā rén zhī jiān de yī zuò qiáo liáng, shì gòu zào dà xíng xì tǒng hé qiàn rù shì xì tǒng de yòu xiào gōng jù, yě shì mǎn zú gāo xìng néng xū qiú de lì qì。 qí tā yǔ yán, sì hū gèng zhù zhòng nà xiē sì píng bā wěn de shāng yòng chéng xù。
jìng zhēng
C# huì bù huì huò dé guǎng fàn de jiē shòu, bìng qiě jǐ diào qí tā de yǔ yán?
Lindholm: tōng cháng, yī zhǒng yǔ yán jì bù huì cóng bié de yǔ yán nà lǐ huò lì, yě bù huì bèi jǐ diào。 nà xiē jiān dìng de Fortran chéng xù yuán bù hái yòng zhe Fortran má? duì yú gè rén lái shuō, yǔ yán de xuǎn zé dāng rán yīn shí 'ér yì, dàn jiù zhěng tǐ 'ér yán, yǔ yán de zhǒng lèi zhǐ huì dì zēng, yě jiù shì shuō, tā men zhī jiān de guān xì shì“ yòu nǐ yòu wǒ” ér bù shì“ yòu nǐ méi wǒ”。
duì yú yī gè xīn yǔ yán de jiē shòu chéng dù, wǎng wǎng qǔ jué yú qí néng lì suǒ jí。 Java jì shù bèi xùn sù jiē shòu, yuán yīn shì duō fāng miàn de, Internet hé WorldWideWeb jiē kǒu, zài qí tā jì shù miàn qián de cuò zhé gǎn, duì yú Java jì shù fā zhǎn fāng xiàng de quán miàn yǐng xiǎng néng lì, dōushì yuán yīn。 lìng yī gè zhòng yào de yuán yīn shì Java dú lì yú chǎng shāng, zhè yì wèi zhe zài jiān róng chǎn pǐn miàn qián kě yǐ cóng róng xuǎn zé。
C# shì fǒu huì huò dé guǎng fàn jiē shòu? shì qíng kuàng 'ér dìng。 zǒng de lái shuō, nà xiē duì yú píng tái wú guān xìng hé chǎng shāng wú guān xìng mò bù guān xīn de chéng xù yuán, kě néng huì xǐ huān C#。 nà xiē gēn wēi ruǎn píng tái kǔn zài yī qǐ rén dāng rán kě néng xiǎng yào xún zhǎo VB hé VC de yī gè chū sè de tì dài pǐn。 dàn shì duì yú chéng xù kuà píng tái zhí xíng néng lì tè bié guān zhù de chéng xù yuán, jiāng huì jiān shǒu Java zhī lèi de yǔ yán。 zhè zhǒng néng lì duì yú duō zhòng fǎng wèn shè bèi( multipleaccessdevices) hé fēn bù shì jì suàn mó xíng zhì guān zhòng yào, ér Java yǔ yán tí gōng liǎo yī gè biāo zhǔn de、 dú lì yú chǎng shāng yùn xíng shí huán jìng。
Stroustrup:C# de liú xíng chéng dù jīhū wán quán qǔ jué yú wēi ruǎn tóu rù de zī jīn duō shǎo。 kàn shàng qù C# de xīng qǐ kěn dìng huì xī shēng diào qí tā yī xiē yǔ yán de lì yì, dàn shì shì shí shàng wèi bì rú cǐ。 Java de péng bó fā zhǎn bìng méi yòu gěi C++ dài lái shuāi bài。 C++ de yìng yòng réng rán zài wěn dìng zēngzhǎng( dāng rán, yǐ jīng bù shì bào zhà xìng de zēngzhǎng liǎo)。 yě xǔ qí tā de yǔ yán yě hái néng huò dé zì jǐ de yī xí zhī dì。
bù guò, wǒ shí zài kàn bù chū yòu shénme bì yào zài fā míng yī zhǒng xīn de zhuān yòu yǔ yán。 tè bié shì wēi ruǎn, jì shēng VB, hé xū C#? |
bù tóng oop yǔ yán gè yòu shénme yōu shì hé liè shì? |
Stroustrup: C++ de yōu diǎn zì shǐ zhì zhōng dōushì zhè me jǐ tiáo: líng huó、 gāo xiào, ér qiě bìng fēi zhuān yòu yǔ yán。 xiàn zài ISOC++ biāo zhǔn de chū xiàn, gǒng gù liǎo zuì hòu yī diǎn。
wǒ rèn wéi C++ de gāo xiào shì tā zuì jī běn de yōu diǎn。 zhè zhǒng gāo xiào lái zì yú qí tè yòu de shù jù hé jì suàn mó xíng, jiào zhī Java hé C#, zhè zhǒng mó xíng gèng jiā tiē jìn jī qì。 bù guò, nǎ xiē chéng xù cái zhēn zhèng dì kě wàng zhè me gāo de xiàolǜ? zhè shì gè wèn tí。 wǒ rèn wéi zhè lèi chéng xù fēi cháng duō。 rén men duì yú jì suàn jī de qī wàng, yǒng yuǎn dū chāo yuè yìng jiàn kē jì de fā zhǎn sù dù。 hěn xiǎn rán, Java hé C# de shè jì zhě de xiǎng fǎ bù tóng, tā men rèn wéi, zài hěn duō dì fāng xiàolǜ wèn tí wú guān jǐn yào。
C++ zhù yào de quē diǎn, guī zuì yú zāo gāo de jiào yù( shì nà xiē shǐ zhōng rèn wéi C++ shì gè chún cuì miàn xiàng duì xiàng yǔ yán de rén, hé nà xiē bǎ C++ dàngchéng C yǔ yán biàn tǐ de rén dǎo zhì liǎo zhè zhǒng qíng kuàng), guī zuì yú bù tóng píng tái shàng de bù yī zhì xìng, guī zuì yú bù wán zhěng、 bù biāo zhǔn de biān yì qì shí xiàn, guī zuì yú píng tái wú guān de xì tǒng jí chéng xù kù de quē shǎo。
zhè xiē wèn tí guī yú yī diǎn, jiù shì quē fá yī gè zhuó yuè de chǎng shāng, néng gòu mǎn zú zhěng gè C++ shè qū de xū qiú, yǒng yú tóu rù dà liàng de zī jīn kāi fā bì yào de chéng xù kù。
Lindholm:Java jì shù de chéng gōng, shì yīn wéi tā zài hé shì de shí jiān, chū xiàn zài hé shì de dì diǎn, ér qiě hé lǐ dì xuǎn zé liǎo yǔ yán hé jì suàn píng tái de zhī chí mù biāo。 Java bìng bù shì zài suǒ yòu chǎng hé dū yōu yú qí tā oop yǔ yán, dàn shì duì yú chū xiàn de xīn wèn tí néng gòu jiě jué dé hěn chū sè。 tā miàn xiàng Internet jì suàn huán jìng, bì miǎn liǎo C++ zhōng huì sè de jié gòu, chéng gōng fān yuè liǎo jì chéng jī zhì de nǎo rén wèn tí。 lā jī shōu jí jī zhì xiǎn zhù dì tí gāo liǎo shēng chǎn shuài, jiàng dī liǎo fù zá dù。 zài wǎng luò bèi jǐng xià shǐ yòng xū nǐ jī, yǐ jí yòu guān 'ān quán xìng hé dòng tài jiā zài de yī xì liè shè jì xuǎn zé, yíng hé liǎo zhèng zài chū xiàn de xū qiú hé yuàn wàng。 zhè xiē tè xìng shǐ Java bù jǐn chéng wéi xiàn yòu chéng xù yuán de xīn wǔ qì, ér qiě yě wéi xīn de chéng xù yuán chuàng zào liǎo fán róng de shì chǎng kōng jiān。
cǐ wài, Java yōng yòu yī gè biāo zhǔn huà de、 èr jìn zhì xíng shì de lèi kù, tí gōng liǎo bì yào de( dāng rán bìng fēi chōng fēn de) píng tái yǔ chǎng shāng wú guān xìng。 píng tái yǔ chǎng shāng wú guān xìng yào qiú yī xiàng jì shù bì xū yòu qīng xī de guī fàn, bìng qì nà xiē zǔ 'ài 'èr jìn zhì biāo zhǔn shí shī de tè xìng。 C++ suī rán yòu yī gè ISO biāo zhǔn, dàn qí shí shèn zhì duì yú xiāng tóng xì tǒng yǔ xiāng tóng zhǐ lìng tǐ xì de gè gè píng tái, yě tí bù chū yī gè shí yòng de、 gè bǎn běn jiān róng de 'èr jìn zhì biāo zhǔn。
lì shǐ shàng hěn duō shǐ yòng xū nǐ jī de yǔ yán bǎo shòu zénàn, shì yīn wéi qí bù gòu chū sè de xìng néng wèn tí, ér zhè yào guī guò yú huǎn màn de jiě shì qì hé zāo gāo de lā jī shōu jí qì。 Java de zǎo qī shí xiàn yě yīn wéi tóng yàng de wèn tí shòu dào yán lì de pī píng。 dàn shì zì nà shí qǐ, yè jiè xiàng xīn de xū nǐ jī shí xiàn jì shù tóu rù liǎo dà liàng zī jīn, qǔ dé liǎo xiǎn zhù de xiào guǒ, rú jīn zài dà bù fēn chǎng hé, Java de xìng néng gēn cháng guī de jìng tài biān yì yǔ yán xiāng bǐ háo bù xùn sè。 zhè shǐ dé chéng xù yuán zài huò dé píng tái hé chǎng shāng wú guān xìng de tóng shí, yě bù bì fù chū xìng néng shàng de dài jià。
C++ bìng méi yòu qiáng zhì shǐ yòng miàn xiàng duì xiàng fāng fǎ, yīn cǐ wèile biān xiě chū sè de miàn xiàng duì xiàng dài mǎ, jiù yào qiú chéng xù yuán men yòu xiāng dāng qiáng de jì lǜ xìng。 hěn duō gōng sī jiù shì yīn wéi zhè gè yuán yīn fàng qì liǎo C++。 zuò wéi yǔ yán, Java de yī gè tū chū de yōu diǎn jiù shì qiáng zhì miàn xiàng duì xiàng fāng fǎ, bù yǔn xǔ fēi miàn xiàng duì xiàng de jié gòu。
C# jiè yú C++ hé Java zhī jiān, jiǎo tà liǎng zhǐ chuán, yīn cǐ jì bù gòu 'ān quán, yòu shī zhī fù zá。
duì yú gōng sī lái shuō, cǎi yòng xīn de yǔ yán yào fù chū jù dà dài jià。 gù bù dào hǎo de chéng xù yuán( méi rén shú xī zhè zhǒng xīn yǔ yán), péi xùn fèi yòng gāo dé jīng rén, xué xí guò chéng zhōng shēng chǎn shuài hé chǎn pǐn zhì liàng xià jiàng, duō nián de jīng yàn suí fēng xiāo shì, děng děng。 yī zhǒng yǔ yán rú hé kè fú zhè xiē zhàng 'ài?
Lindholm: shuō dé hěn duì, cǎi yòng xīn dōng xī què shí cháng cháng kāi xiāo jù dà。 bù guò wèn tí shì: zhè gè xīn dōng xī shì fǒu néng gòu jié shěng gèng duō de kāi zhī, huò zhě tí gōng jù dà de gǎi jìn, huò qǔ hé lǐ de huí bào? hěn duō gōng sī fā xiàn, zhuànxiàng Java jì shù bù lùn zài kāi fā de hòu duān( jìn kuài jìn rù shì chǎng、 kuài sù dié dài kāi fā、 wéi hù jiǎn dān xìng) hái shì qián duān( kuà píng tái fā bù, shì yòng fàn wéi cóng dī duān shè bèi dào gāo duān fú wù qì de jì shù, ān quán xìng), dōunéng jié shěng dà bǐ de kāi xiāo。
duì yú xīn shì wù de jiē nà, cháng cháng shì zài tòng chǔ de yā lì zhī xià。 hěn dà chéng dù shàng, zhè zhèng shì Java suǒ jīng lì de。 Java de chǎn shēng, shì duì dāng shí hěn duō xì tǒng de quē xiàn suǒ zuò chū de fǎn yìng。 Java jì shù tōng guò xià miàn de shǒu duàn jiǎn qīng liǎo kāi fā zhě de tòng chǔ: 1) gù jí liǎo wǎng luò jì suàn fāng miàn de xū qiú, shì yìng yùn 'ér shēng。 2) zài jì shù néng lì de jué zé shàng, bǎo chí liáng hǎo de pǐn wèi, gù jí liǎo dà zhòng de xīn lǐ。 3) cǎi yòng shì dù qiáng zhì xìng cè lüè tuī xíng shè jì jué dìng。 cǐ wài, Java jì shù yǐ jīng chéng wéi dà xué jiào xué zhōng de zhù liú, zhè tóng yàng bǎo zhèng liǎo Java kāi fā zhě duì wǔ de bù duàn zhuàng dà。
dàn shì zuì zhòng yào de yī diǎn shì, zài méi yòu lìng yī zhǒng chéng xù shè jì jì shù, néng gòu xiàng Java nà yàng yǔn xǔ chéng xù yuán kāi fā jī yú Internet de bù tóng píng tái zhī shàng de yìng yòng chéng xù。 Java píng tái zài zhè fāng miàn de jié chū biǎo xiàn, yǐ jīng bèi dà liàng de shí lì zhèng míng。 Java yǐ jīng chéng wéi Internet shàng de quē shěng yìng yòng chéng xù píng tái, JavaAPIs yě chéng wéi Internet yìng yòng chéng xù kāi fā de tiān rán píng tái。
Stroustrup: wēi ruǎnhuo Sun bǎ dà bǐ de jīn qián rēng zài Java、 VB hé C# zhōng, bìng bù shì yīn wéi tā liáng xīn fā xiàn, yě bù shì yīn wéi tā men zhēn de xiāng xìn zhè xiē yǔ yán néng gòu dài gěi chéng xù yuán gèng měi hǎo de shēng huó, ér shì lì yì shǐ rán。
yòu yī gè shuō fǎ, rèn wéi ruǎn jiàn gōng jù chǎng shāng rú guǒ néng gòu bǎ yìng yòng chéng xù kāi fā zhě de zhuān yè jì shù rèn wù fù dān qǐ lái, jiāng huò qǔ jù dà de jīng jì lì yì。 wǒ duì qí bèi hòu de jīng jì fēn xī pō wéi huái yí, wǒ rèn wéi zhè hěn nán chéng wéi xiàn shí, tè bié shì dāng yìng yòng chéng xù kāi fā zhě shǐ yòng kāi fàng de、 biāo zhǔn huà de gōng jù shí, tā men kě yǐ yòu duō zhǒng xuǎn zé, cóng 'ér shǐ shàng miàn de xiǎng fǎ gèng jiā bù kě néng。
duō nián yǐ qián, C++ jiù yǐ jīng jù yòu fàn xíng néng lì ( yě jiù shì templates hé STL), yòu yùn suàn fú zhòng zài, yòu méi jǔ lèi xíng? wǒ men huì bù huì zài Java de wèi lái bǎn běn zhōng kàn dào zhè xiē tè xìng? Java shì bù shì yīnggāi nà rù zhè xiē tè xìng ní?
Strousturp: cóng 1988-89 nián qǐ, C++ jiù yǐ jīng yòu liǎo templates。 dàn shì wǒ men huā liǎo bù shàoshí jiān lái liǎo jiě rú hé zuì hǎo dì yùn yòng zhè gè gōng jù, zǎo qī gè chǎng jiā duì yú template de zhī chí zài pǐn zhì shàng yě yòu hěn dà de chā yì。 yòu xiē biān yì qì chǎng shāng dòng zuò chí huǎn, zhì shǎo yòu yī gè zhù yào de biān yì qì chǎng shāng( hǎo xiàng shì zhǐ wēi ruǎn, wēi ruǎn zài VisualC++4.0 cái kāi shǐ zhī chí template, zài cǐ zhī qián yī zhí shēng chēng template shì guò yú fù zá 'ér yòu méi shí me yòng de jì shù, shí zhì jīn rì, VisualC++ duì yú template de zhī chí zài zhù liú biān yì qì zhōng dū shǔ yú zuì chā de yī dàng héng héng yì zhě zhù) àn zhōng gǔ lì shēng míng lángjí de fǎn template xuān chuán, zhí dào tā men zì jǐ zhōng yú xué huì liǎo zhè xiàng jì shù wéi zhǐ。 zhí dào jīn tiān, duì yú template de zhī chí zài pǐn zhì shàng réng rán yòu dài gǎi jìn。
nǐ shàng miàn tí dào de nà xiē tè xìng, wǒ rèn wéi Java( hái yòu C#) yīnggāi, yě kěn dìng huì zhú jiàn yǐn rù。 nà xiē duì yú chéng xù yuán lái shuō zuì yòu yòng de yǔ yán tè xìng hé gài niàn, jiāng huì zhú jiàn jí zhōng, chéng wéi gè jiā zhù liú yǔ yán de bì rán zhī xuǎn。 yě jiù shì shuō, wǒ rèn wéi lèi sì xī gòu hán shù hé múbǎn tè shū huà zhī lèi de jī zhì, yuǎn yuǎn bǐ méi jǔ děng jī zhì zhòng yào dé duō。
Lindholm: Java jì shù chéng gōng de yuán yīn zhī yī, jiù shì hěn qīng chǔ nǎ xiē bù gāi zuò。 wǒ men dé duō wèn jǐ gè wèishénme: zhè xiàng tè xìng shì bù shì bì bù kě shǎo? zēng jiā tā huì dài lái nǎ xiē kāi xiāo? yùn suàn fú zhòng zài shì C++ zhōng yī xiàng jí qí qiáng dà de tè xìng, dàn shì tā yě dà dà zēng jiā liǎo C++ yǔ yán de fù zá dù, hěn duō réndōu nán yǐ zhāo jià。 Java zài gè zhǒng kě néng de quán héng zhī zhōng, zuò chū liǎo míng zhì de jué zé, zhǎo dào liǎo néng lì yǔ xū qiú zhī jiān de wán měi píng héng diǎn。
dāng rán, Java yě huì fā zhǎn, ér qiě zuì zhòng yào de shì, xiàn zài shì kāi fā zhě men zài tuī dòng fā zhǎn。 Java zēng jiā fàn xíng néng lì zhè jiàn shì, hěn hǎo dì zhǎn shì liǎo Java shì rú hé tōng guò zhěng gè kāi fā zhě shè qún de cānyù, zài quán héng zhōng jué dìng zhèng què de píng héng diǎn。 guān yú zēng jiā fàn xíng lèi xíng( generictypes) de“ Java guī gé shēn qǐng”( JavaSpecificationRequest,JSR) yǐ jīng jìn rù JCP( JavaCommunityProcess) chéng xù, ér qiě yǐ jīng kāi fā liǎo hěn cháng yī duàn shí jiān( cān jiàn http://java.sun.com/aboutJava/communityprocess/ zhī JSR-014)。 xiàn zài, zài JCP zhōng, yòu chāo guò 80 gè JSRs zhèng zài tǎo lùn zhōng, zhè chōng fēn tǐ xiàn liǎo zhěng gè tǐ xì duì kāi fā zhě de jī jí fǎn kuì hé gāo dù hé zuò, zhè zhèng shì qū dòng Java píng tái bù duàn jìn huà de dòng lì。 |
|
(Evolution vs. Revolution)
C++ shì yī zhǒng fā zhǎn xíng de yǔ yán, Java hé C# sì hū gèng xiàng shì gé xīn xíng yǔ yán( tā men shì cóng tóu shè jì de)? shénme shí hòu, gé xīn xíng de yǔ yán cái shì bì xū de ní?
Lindholm:Java jì shù bìng fēi píng kōng chū shì, fǎn 'ér gèng xiàng shì fā zhǎn xíng de。 Java suǒ yòu de tè xìng, zài Java píng tái tuī chū zhī qián, dū zhì shǎo yǐ jīng cún zài yú lìng yī zhǒng huán jìng zhī zhōng。 Java de gòng xiàn zài yú, zài zhòng duō de tè xìng hé quán héng zhōng, zuò chū liǎo hé lǐ de xuǎn zé, shǐ dé chǎn pǐn jì shí yòng, yòu yōu yǎ。 Java jì shù duì yú chéng xù yuán de tài dù shì: fǔ yǎng, dàn bù nì 'ài。
Stroustrup: cóng jì shù shàng jiǎng, wǒ bìng bù rèn wéi Java hé C# shì shénme“ cóng tóu shè jì de” gé xīn xíng yǔ yán。 cháng ruò Java shì cóng jì shù yuán zé chū fā, cóng tóu shè jì, dà gài jiù bù huì mó fǎng C/C++ nà zhǒng chǒu lòu hé bìng tài de yǔ fǎ liǎo( bù bì jīng yà, Stroustrup zài hěn duō chǎng hé biǎo shì guò, C++ cǎi yòng C de yǔ fǎ xíng shì, shí zài shì pò yú jiān róng xìng。 tā běn rén gèng piān 'ài Simula de yǔ fǎ héng héng yì zhě)。
wǒ rèn wéi, zhǐ yòu dāng chéng xù yuán men miàn duì de wèn tí fā shēng liǎo gēn běn de biàn huà de shí hòu, huò zhě dāng wǒ men fā xiàn liǎo quán xīn de、 jí qí yōu yuè de chéng xù shè jì jì shù, yòu wán quán bù néng wéi xiàn cún yǔ yán suǒ zhī chí de shí hòu, wǒ men cái xū yào quán xīn de yǔ yán。 wèn tí shì, wǒ men kǒng pà yǒng yuǎn yě pèng bù dào nà xiē“ gēn běn”、“ quán xīn” de qíng kuàng。
wǒ yǐ wéi, zì cóng oop wèn shì yǐ lái, kě chēng wéi“ gēn běn” de xīn xíng chéng xù shè jì jì shù, wéi yòu fàn xíng chéng xù shè jì( genericprogramming) hé shēng chéng shì chéng xù shè jì( generativeprogramming) jì shù, zhè liǎng xiàng jì shù zhù yào shì yuán yú C++templates jì shù de yùn yòng, yě yòu yī bù fēn céng jīng bèi shì wéi miàn xiàng duì xiàng hé hán shù shì yǔ yán (functionallanguages) de cì yào chéngfèn, xiàn zài dū biàn chéng zhèng shì、 kě yòng hé kě chéng shòu de jì shù liǎo。 wǒ duì yú mù qián C++ múbǎn (template) chéng xù shè jì de chéng guǒ fēi cháng xīng fèn。 lì rú, xiàng POOMA,Blitz++ hé MTL děng chéng xù kù, zài hěn duō dì fāng gǎi biàn liǎo shù zhí jì suàn de fāng shì。
C# de yī gè“ mài diǎn”, jiù shì tā men de jiǎn dān xìng。 xiàn zài Java shì bù shì kuài shī qù zhè gè mài diǎn liǎo?
Stroustrup: xīn yǔ yán zǒng shì xuān chēng zì jǐ rú hé rú hé jiǎn dān, duì lǎo yǔ yán de fù zá xìng pō duō fēi yì。 qí shí zhè zhǒng suǒ wèi de“ jiǎn dān xìng”, jiǎn dān dì shuō, jiù shì bù chéng shú xìng。 yǔ yán de fù zá xìng, shì zài jiě jué xiàn shí shì jiè zhōng jí wéi fán suǒ hé tè shū de fù zá wèn tí de guò chéng zhōng zhú jiàn zēng jiā de。 yī gè yǔ yán zhǐ yào huó de shí jiān gòu cháng, zǒng huì yòu mǒu xiē dì fāng zhú jiàn fù zá qǐ lái, huò zhě shì yǔ yán běn shēn, huò zhě shì chéng xù kù hé gōng jù。 C++ hé Java xiǎn rán dōubù lì wài, wǒ kàn C# yě yī yàng。 rú guǒ yī zhǒng yǔ yán néng gòu dù guò zì jǐ de yòu nián shí dài, tā huì fā xiàn, zì jǐ wú lùn shì tǐ jī hái shì fù zá xìng dōudà dà zēng jiā liǎo。
Lindholm: Java jì shù dídí gōng néng zài zēng jiā, xū yào xué xí de dōng xī yě zài zēng jiā。 bù guò gōng néng de zēng jiā bìng bù yī dìng dài lái fù zá xìng de zēng jiā。 Java jì shù de fā zhǎn, bìng méi yòu shǐ xué xí qū xiàn gèng jiā dǒu qiào, zhǐ shì ràng tā jì xù xiàng yòu fāng yán zhǎn liǎo。
biāo zhǔn
biāo zhǔn huà yǔ yán hé kāi fàng xíng yǔ yán gè zì de yōu diǎn hé quē diǎn hé zài?
Lindholm: duì yú yī gè kāi fàng、 bù yǔn xǔ zhuān yòu kuò zhǎn、 jù yòu quán wēi de qiáng zhì xìng biāo zhǔn yǔ yán huò zhě yùn xíng huán jìng lái shuō, bù cún zài shénme quē diǎn。 yǔn xǔ zhuān yòu kuò zhǎn jiù yì wèi zhe yǔn xǔ chǎng shāng xià tào zǐ bǎng jià kè hù。 tè bié zhòng yào de shì, bì xū ràng zhěng gè píng tái, ér bù zhǐ shì qí zhōng yī bù fēn wán quán biāo zhǔn huà, cái néng dù jué chǎng shāng men lì yòng gāo céng cì de zhuān yòu API xià tào zǐ。 kè hù yào qiú yòu xuǎn zé chǎng shāng de zì yóu, tā men jì yào yòu chuàng zào xìng, yòu xū yào jiān róng xìng。
Stroustrup: duì yú yī gè yǔ yán, rú C/C++ lái shuō, jiàn lì zhèng shì biāo zhǔn( rú ISO biāo zhǔn) zuì dà de hǎo chù, zài yú kě yǐ fáng zhǐ mǒu yī gè chǎng shāng cāo zòng zhè zhǒng yǔ yán, bǎ tā dàngchéng zì jǐ de yáo qián shù。 duō gè chǎng shāng de jìng zhēng gěi yòng hù dài lái de shì jiào dī de jià wèi hé jiào hǎo de wěn dìng xìng。
zhuān yòu yǔ yán de hǎo chù, yī shì liú xíng, èr shì piányí( bù guò děng nǐ bèi tào láo liǎo zhī hòu, qíng kuàng jiù huì qǐ biàn huà), sān shì duì yú shāng yè xìng xū qiú kě yǐ zuò chū kuài sù de fǎn yìng。
biāo zhǔn huà yǔ yán de tè diǎn zhī yī shì, tā bù néng hū lüè tè shū yòng hù de xū qiú。 bǐ rú wǒ zài AT&T zhōng suǒ kǎo lǜ de dōng xī, qí guī mó、 kě kào xìng hé xiàolǜ yào qiú, gēn nà xiē pǔ tōng chǎng shāng guān zhù de dà zhòng ruǎn jiàn xiāng bǐ, gēn běn bù kě tóng rì 'ér yǔ。 nà xiē gōng sī hěn zì rán zhǐ guān zhù zhù yào de xū qiú。
rán 'ér, duō shù dà jī gòu hé shēn chù qián yán de gōng sī, dōuyòu zhe tè shū de xū qiú。 C++ de shè jì shì kāi fàng、 líng huó hé gāo xiào de, néng gòu mǎn zú wǒ suǒ néng xiǎng xiàng de rèn hé xū qiú。 gēn qí tā de xiàn dài yǔ yán xiāng bǐ, C++ de jiāzhǎng shì zuò fēng kě wèi shǎo zhī yòu shǎo, yuán yīn jiù zài zhè。 dāng rán, bù néng zàn shǎng zhè yī diǎn de rén huì gòu bìng C++ de“ wēi xiǎn”。
yōng yòu zhèng shì hé kāi fàng biāo zhǔn de yǔ yán zhù yào shì wéi biān chéng gōng jù de shǐ yòng zhě hé kè hù fú wù de, ér yōng yòu zhuān shǔ“ biāo zhǔn” de yǔ yán, zhù yào shì wéi chǎng shāng fú wù de。
xiāng guān cí tiáo: AOP |
|
|