<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/622b91f015da9b288b3823f5/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/622b91f015da9b288b3823f5/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">概述<span class="ff2 ls1"> </span></div><div class="t m0 x1 h3 y2 ff1 fs1 fc0 sc0 ls2 ws0">本部分包含如下内容<span class="_ _0"></span>:<span class="ff3 sc1 ls1"> </span></div><div class="t m0 x1 h4 y3 ff2 fs1 fc1 sc1 ls1 ws0">谁应该阅读本文档</div><div class="t m0 x2 h5 y4 ff4 fs1 fc0 sc1 ls3 ws0"> </div><div class="t m0 x1 h4 y5 ff2 fs1 fc1 sc1 ls1 ws0">本文档的组织结构</div><div class="t m0 x2 h5 y6 ff4 fs1 fc0 sc1 ls3 ws0"> </div><div class="t m0 x1 h4 y7 ff2 fs1 fc1 sc1 ls1 ws0">参考</div><div class="t m0 x3 h5 y8 ff4 fs1 fc0 sc1 ls3 ws0"> </div><div class="t m0 x1 h5 y9 ff4 fs1 fc0 sc1 ls1 ws0"> </div><div class="t m0 x1 h4 ya ff2 fs1 fc0 sc1 ls1 ws0">面向对象的开发方法使得程序开发更加直观、快捷,程序更容易被重构、理解。大多数面向对象开发环境</div><div class="t m0 x1 h5 yb ff2 fs1 fc0 sc1 ls1 ws0">至少由以下三个部分组成:<span class="ff4"> </span></div><div class="t m0 x4 h6 yc ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="ff2 fs1">对象库<span class="ff4"> </span></span></span></div><div class="t m0 x4 h6 yd ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="ff2 fs1">开发工具集<span class="ff4"> </span></span></span></div><div class="t m0 x4 h6 ye ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="ff2 fs1">支持面向对象的编程语言和相应的类库<span class="ff4"> </span></span></span></div><div class="t m0 x1 h5 yf ff4 fs1 fc0 sc1 ls4 ws0">Objective-C <span class="_ _2"> </span><span class="ff2 ls1">是一种设计用来支持面向对象开发的简洁的计算机语言,它是标准<span class="_ _3"> </span><span class="ff4">C<span class="_ _2"> </span></span>语<span class="_ _4"></span>言的一个很小但是很</span></div><div class="t m0 x1 h5 y10 ff2 fs1 fc0 sc1 ls1 ws0">强大的超集。<span class="_ _5"></span><span class="ls5">除了<span class="_ _3"> </span><span class="ff4 ls1">C<span class="_ _2"> </span><span class="ff2">之外,<span class="_ _5"></span><span class="ff4 ls6">Objective-<span class="_ _4"></span>C<span class="_ _2"> </span><span class="ff2 ls1">主要<span class="_ _4"></span>基于<span class="_ _2"> </span></span><span class="ls7">Smallt<span class="_ _4"></span>alk<span class="ff2 ls1">,<span class="_ _5"></span>最早的面向对象的编程语言之一。<span class="_ _5"></span><span class="ff4 ls8">Objective-C</span></span></span></span></span></span></span></div><div class="t m0 x1 h5 y11 ff2 fs1 fc0 sc1 ls1 ws0">以一种简单和直接的方式使得<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>语言具有了面向对象的能力。<span class="ff4 ls3"> </span></div><div class="t m0 x1 h4 y12 ff2 fs1 fc0 sc1 ls1 ws0">如果您以前从来没有使用过面向对象的方法开发程序,本文档则能够帮助您熟悉面向对象的开发技术。它</div><div class="t m0 x1 h5 y13 ff2 fs1 fc0 sc1 ls1 ws0">阐述了面向对象设计的意义,以及如何开发面向对象的程序<span class="ff4 ls9">. </span></div><div class="t m0 x1 h7 y14 ff1 fs3 fc0 sc0 lsa ws0">谁应该阅读本文档<span class="ff3 sc1 ls1"> </span></div><div class="t m0 x1 h5 y15 ff2 fs1 fc0 sc1 ls1 ws0">本文档的阅读对象为对如下几个方面感兴趣的读者:<span class="ff4"> </span></div><div class="t m0 x4 h6 y16 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="ff2 fs1">面向对象编程<span class="ff4"> </span></span></span></div><div class="t m0 x4 h6 y17 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 lsb">Cocoa<span class="_ _2"> </span><span class="ff2 ls1">应用程序框架的基础<span class="ff4"> </span></span></span></span></div><div class="t m0 x4 h6 y18 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 lsc">Objective-C<span class="_"> </span><span class="ff2 ls2">编程</span><span class="ls1"> </span></span></span></div><div class="t m0 x1 h5 y19 ff2 fs1 fc0 sc1 ls1 ws0">本文档介绍了<span class="_ _2"> </span><span class="ff4 lsc">Objective-<span class="_ _4"></span>C<span class="_"> </span></span>所基于的面向对象模型。<span class="ff4"> </span></div><div class="t m0 x1 h5 y1a ff2 fs1 fc0 sc1 ls1 ws0">本文档不是<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>语言的介绍文档,<span class="_ _6"></span>所以假设您已具备<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>语言的相关知识。<span class="_ _6"></span>然而,<span class="_ _6"></span>您无需为您不是一个熟练的</div><div class="t m0 x1 h5 y1b ff4 fs1 fc0 sc1 ls1 ws0">C<span class="_ _2"> </span><span class="ff2">程序员而担<span class="_ _4"></span>心,因为<span class="_ _2"> </span></span><span class="ls8">Objective-C<span class="_"> </span></span><span class="ff2">的面向对象编程和基于过程的标准<span class="_ _2"> </span></span>C<span class="_"> </span><span class="ff2">的编程有很大不同。</span> </div><div class="t m0 x1 h5 y1c ff2 fs1 fc0 sc0 ls2 ws0">重要:<span class="ff4 sc1 ls1"> <span class="ff2">本文档只是描述了对于使用<span class="_ _7"> </span></span><span class="lsd">Objective-C<span class="_ _7"> </span></span><span class="ff2">编程来说很重要的一些基础概念,并没有对<span class="_"> </span></span><span class="lsd">Objective-C</span></span></div><div class="t m0 x1 h8 y1d ff2 fs1 fc0 sc1 ls1 ws0">语言本身做过多的叙述,如果您对<span class="_ _2"> </span><span class="ff4 lsd">Objective-C<span class="_"> </span></span>语言感兴趣,请参考<span class="_ _2"> </span><span class="ff6 ls4 ws1">Objective-C 2.0 </span></div><div class="t m1 x5 h9 y1d ff2 fs4 fc0 sc1 ls1 ws0">程序设计语言</div><div class="t m0 x6 h5 y1d ff2 fs1 fc0 sc1 ls1 ws0">。<span class="ff4"> </span></div><div class="t m0 x1 ha y1e ff1 fs3 fc0 sc0 lse ws0">本文档的结构<span class="ff3 fs5 sc1 ls1"> </span></div><div class="t m0 x1 h5 y1f ff2 fs1 fc0 sc1 ls1 ws0">本文档分为如下几个章节:<span class="ff4 ls3"> </span></div><div class="t m0 x4 h6 y20 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 fc1">“<span class="ff2">为何是</span><span class="lsd">Objective-C</span><span class="ff2">?</span>”<span class="fc0"> <span class="_ _2"> </span><span class="ff2">解释了为什么选择</span><span class="lsc">Objective-C</span><span class="ff2">作为</span><span class="lsf">Cocoa</span><span class="ff2">框架的开发语言。</span> </span></span></span></div><div class="t m0 x4 h6 y21 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 fc1">“<span class="ff2">面向对象编程</span>”<span class="fc0"> <span class="_ _2"> </span><span class="ff2">讨论了面向对象编程的基本原理,并阐述了面向对象技术背后的思想,介绍了大</span></span></span></span></div><div class="t m0 x7 h4 y22 ff2 fs1 fc0 sc1 ls1 ws0">量的专门术语。<span class="_ _6"></span>即使您已经对面向对象编程非常熟悉,<span class="_ _8"></span>也推荐您阅读一下该章节,<span class="_ _8"></span>从而对面向对象的</div><div class="t m0 x7 h5 y23 ff4 fs1 fc0 sc1 ls8 ws0">Objective-C<span class="ff2 ls1">和使用的术语有一个感性认识。<span class="ff4"> </span></span></div><div class="t m0 x4 h6 y24 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 fc1">“<span class="ff2">对象模型</span>”<span class="fc0 ls3"> </span></span></span></div><div class="c x2 y25 w2 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">原文地址:http://www.apple.com.cn/developer/Documentation/index.html</div></div><div class="c x8 y27 w3 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">整理:http://www.wikinese.com/forum/</div></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/622b91f015da9b288b3823f5/bg2.jpg"><div class="t m0 x4 h6 y28 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 fc1">“<span class="ff2">程序的组织结构</span>”<span class="fc0 ls3"> </span></span></span></div><div class="t m0 x4 h6 y29 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 fc1">“<span class="ff2">结构化编程</span>”<span class="fc0 ls3"> </span></span></span></div><div class="t m0 x1 ha y2a ff1 fs3 fc0 sc0 ls10 ws0">参考<span class="ff3 fs5 sc1 ls1"> </span></div><div class="t m0 x1 h8 y2b ff6 fs1 fc1 sc1 ls11 ws2">Objective-C 2.0 </div><div class="t m1 x9 h9 y2b ff2 fs4 fc1 sc1 ls1 ws0">程序设计语言</div><div class="t m0 xa h5 y2b ff4 fs1 fc0 sc1 ls1 ws0"> <span class="_ _2"> </span><span class="ff2">介绍了</span><span class="ls8">Objective-C</span><span class="ff2">编程语言。</span> </div><div class="t m0 x1 h8 y2c ff6 fs1 fc1 sc1 ls11 ws2">Objective-C 2.0 </div><div class="t m1 x9 h9 y2d ff2 fs4 fc1 sc1 ls1 ws0">运行时系统编程指南</div><div class="t m0 xb h5 y2d ff4 fs1 fc0 sc1 ls1 ws0"> <span class="_ _2"> </span><span class="ff2">描述了怎样和</span><span class="ls12">Objective-C</span><span class="ff2">运行时系统交互。</span> </div><div class="t m0 x1 h8 y2e ff6 fs1 fc0 sc1 ls11 ws3">Objective-C 2.0 </div><div class="t m1 x9 h9 y2f ff2 fs4 fc0 sc1 ls1 ws0">运行时系统参考库</div><div class="t m0 xc h5 y2f ff4 fs1 fc0 sc1 ls1 ws0"> <span class="_ _2"> </span><span class="ff2">介绍了<span class="_ _2"> </span></span><span class="lsc">Objective-<span class="_ _4"></span>C<span class="_ _2"> </span></span><span class="ff2">运<span class="_ _4"></span>行时系统库的数据结构和函数。<span class="_ _9"></span>您的程序可以使</span></div><div class="t m0 x1 h5 y30 ff2 fs1 fc0 sc1 ls1 ws0">用这些接口来和<span class="_ _2"> </span><span class="ff4 ls4">Objectiv<span class="_ _4"></span>e-C<span class="_"> </span></span>运行时系统进行交互。例如,你可以增加类或者方法,或者获取所有已经加</div><div class="t m0 x1 h5 y31 ff2 fs1 fc0 sc1 ls1 ws0">载的类的类定义表单。<span class="ff4"> </span></div><div class="t m0 x1 h2 y32 ff1 fs0 fc0 sc0 ls0 ws0">为何是<span class="ff2">Objective-C</span><span class="ls1">?<span class="ff2"> </span></span></div><div class="t m0 x1 h5 y33 ff4 fs1 fc0 sc1 lsb ws0">Cocoa<span class="_ _2"> </span><span class="ff2 ls1">框架选择了<span class="_ _3"> </span></span><span class="ls12">Objectiv<span class="_ _4"></span>e-C<span class="_"> </span><span class="ff2 ls1">作为开发语言有许多方面的原因。首先,也是最主要的原因,它是一个面</span></span></div><div class="t m0 x1 h5 y34 ff2 fs1 fc0 sc1 ls1 ws0">向对象<span class="ff4"> <span class="_ _2"> </span></span>的语言。<span class="ff4 lsb">Cocoa<span class="_ _2"> </span></span>框架中的很多功能只能通过面向对象的技术来呈现,本文档将对<span class="_ _3"> </span><span class="ff4 ls13">Cocoa<span class="_"> </span></span>框架的功</div><div class="t m0 x1 h5 y35 ff2 fs1 fc0 sc1 ls1 ws0">能进行具体阐述并介绍怎样使用它们。<span class="_ _6"></span>其次,<span class="_ _6"></span>是标准<span class="_ _3"> </span><span class="ff4">C<span class="_"> </span></span>语言的一个超集,<span class="_ _8"></span>现存的<span class="_ _3"> </span><span class="ff4">C<span class="_"> </span></span>程序无需重新开发就能</div><div class="t m0 x1 h5 y36 ff2 fs1 fc0 sc1 ls1 ws0">够使用<span class="_ _2"> </span><span class="ff4 ls13">Coc<span class="_ _4"></span>oa<span class="_"> </span></span>软件框架,<span class="_ _8"></span>并且您可以在<span class="_ _3"> </span><span class="ff4 ls6">Objective-C<span class="_"> </span></span>中使用<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>的所有特性。<span class="_ _6"></span>您可以选择什么时候采用面向</div><div class="t m0 x1 h4 y37 ff2 fs1 fc0 sc1 ls1 ws0">对象的编程方式(例如定义一个新的类),什么时候使用传统的面向过程的编程方式(定义数据结构和函</div><div class="t m0 x1 h5 y38 ff2 fs1 fc0 sc1 ls1 ws0">数而不是类)。<span class="ff4"> </span></div><div class="t m0 x1 h5 y39 ff2 fs1 fc0 sc1 ls1 ws0">此外,<span class="ff4 ls4">Objective-C<span class="_"> </span></span>是一个简洁的语言,它的语法简单,没有歧义,并且易于学习。<span class="ff4"> <span class="_ _2"> </span></span>因为易于混淆的术语</div><div class="t m0 x1 h5 y3a ff2 fs1 fc0 sc1 ls1 ws0">以及抽象设计的重要性,对于初学者来说,面向对象编程的学习曲线比较陡峭。象<span class="_ _2"> </span><span class="ff4 lsc">Objective-<span class="_ _4"></span>C<span class="_"> </span></span>这种结构</div><div class="t m0 x1 h5 y3b ff2 fs1 fc0 sc1 ls1 ws0">良好的语言使得成为一个熟练的面向对象程序员更为容易。<span class="ff4"> <span class="_ _2"> </span></span>介绍<span class="_ _2"> </span><span class="ff4 ls14">Objetive-C<span class="_"> </span></span>的章节也如同其语言本身一</div><div class="t m0 x1 h5 y3c ff2 fs1 fc0 sc1 ls1 ws0">样简洁。<span class="ff4"> </span></div><div class="t m0 x1 h5 y3d ff2 fs1 fc0 sc1 ls1 ws0">和其他的基于标准<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>语言的面向对象语言相比,<span class="ff4 ls4">Objective-C<span class="_"> </span></span>对动态机制支持得更为彻底。编译器为运行</div><div class="t m0 x1 h4 y3e ff2 fs1 fc0 sc1 ls1 ws0">环境保留了很多对象本身的数据信息,因此某些在编译时需要做出的选择就可以推迟到运行时来决定。这</div><div class="t m0 x1 h5 y3f ff2 fs1 fc0 sc1 ls1 ws0">种特性使得基于<span class="_ _2"> </span><span class="ff4 ls4">Objectiv<span class="_ _4"></span>e-C<span class="_"> </span></span>的程序非常灵活和强大。<span class="_ _0"></span>例如,<span class="_ _0"></span><span class="ff4 lsc">Objective-C<span class="_ _2"> </span><span class="ff2 ls1">的动态机制提供了两个一般面向</span></span></div><div class="t m0 x1 h5 y40 ff2 fs1 fc0 sc1 ls1 ws0">对象语言很难提供的优点:<span class="ff4"> </span></div><div class="t m0 x4 h6 y41 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 lsc">Objective-C<span class="_"> </span><span class="ff2 ls1">支持开放式的动态绑定,从而有助于交互式用户接口架构的简单化。例如,在</span></span></span></div><div class="t m0 x7 h5 y42 ff4 fs1 fc0 sc1 lsc ws0">Objective-C<span class="_"> </span><span class="ff2 ls1">中发送消息既无需考虑消息接收者的类也不用考虑方法的名字,从而可以允许用户在运</span></div><div class="t m0 x7 h5 y43 ff2 fs1 fc0 sc1 ls1 ws0">行时再做出决定,<span class="_ _a"></span>也给了开发者在设计时极大的自由<span class="_ _a"></span>(术语<span class="ff4">“</span>动态绑定<span class="ff4 ls15">” <span class="_ _2"> </span></span>,<span class="_ _a"></span><span class="ff4">“<span class="ff2">消息</span>“<span class="ff2">,<span class="_ _a"></span><span class="ff4">“<span class="ff2">消息接收者</span>”<span class="ff2">,<span class="_ _a"></span><span class="ff4 ls3"> “<span class="_ _a"></span><span class="ff2 ls1">类<span class="ff4">”</span></span></span></span></span></span></span></div><div class="t m0 x7 h5 y44 ff2 fs1 fc0 sc1 ls1 ws0">将在随后的章节中进行介绍)<span class="_ _b"></span>。<span class="ff4"> </span></div><div class="t m0 x4 h6 y45 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="fs1 lsc">Objective-C<span class="_"> </span><span class="ff2 ls1">的动态机制成就了各种复杂的开发工具。运行环境提供了访问运行中程序数据的接</span></span></span></div><div class="t m0 x7 h5 y46 ff2 fs1 fc0 sc1 ls1 ws0">口,所以使得开发工具监控<span class="_ _2"> </span><span class="ff4 lsc">Objective-<span class="_ _4"></span>C<span class="_"> </span></span>程序成为可能。<span class="ff4"> </span></div><div class="t m0 x1 h5 y47 ff2 fs1 fc0 sc0 ls2 ws0">注意:<span class="sc1 ls1">作为编程语言来说,<span class="ff4 ls7">Objective-C<span class="_ _2"> </span></span>有很悠久的历史。它在二十世纪八十年代早期被发明于<span class="_ _3"> </span><span class="ff4 ls16">S<span class="_ _0"></span>tepstone</span></span></div><div class="t m0 x1 h5 y48 ff2 fs1 fc0 sc1 ls1 ws0">公司,<span class="_ _8"></span>作者是<span class="_ _3"> </span><span class="ff4 ls17 ws4">Br<span class="_ _4"></span>ad Cox<span class="_"> </span></span>和<span class="_ _2"> </span><span class="ff4 ls4 ws5">T<span class="_ _6"></span>om Love<span class="ff2 ls1 ws0">。<span class="_ _6"></span>八十年代后期,<span class="_ _6"></span><span class="ff4 ls18">NeXT<span class="_"> </span><span class="ff2 ls1">计算机有限责任公司获得了使用<span class="_ _3"> </span></span><span class="lsd">Objective-C</span></span></span></span></div><div class="t m0 x1 h5 y49 ff2 fs1 fc0 sc1 ls1 ws0">来开发<span class="_ _c"> </span><span class="ff4 ls19">NeXTS<span class="_ _0"></span>tep<span class="_ _c"> </span><span class="ff2 ls1">框架的授权,也就是后来的<span class="_ _c"> </span></span><span class="lsf">Cocoa<span class="ff2 ls1">。</span><span class="ls18">Ne<span class="_ _4"></span>XT<span class="_ _c"> </span><span class="ff2 ls1">在多方面对<span class="_ _c"> </span></span><span class="lsc">Objective-C<span class="_ _c"> </span><span class="ff2 ls1">进行了扩展,例如</span></span></span></span></span></div><div class="t m0 x1 h5 y4a ff2 fs1 fc0 sc1 ls1 ws0">协议部分。<span class="ff4"> </span></div><div class="t m0 x1 h2 y4b ff1 fs0 fc0 sc0 ls0 ws0">面向对象编程技术<span class="ff2 ls1"> </span></div><div class="t m0 x1 h4 y4c ff2 fs1 fc0 sc1 ls1 ws0">在现实生活中,我们必须弄明白我们所面对的大量的事实以及观念。为此,我们需要从表面细节中抽象出</div><div class="t m0 x1 h4 y4d ff2 fs1 fc0 sc1 ls1 ws0">其内在逻辑,<span class="_ _6"></span>发现事物的本质。<span class="_ _d"></span>抽象法可以帮助我们揭示事物的因果,<span class="_ _6"></span>结构和表现形式,<span class="_ _d"></span>区分主要和次要。</div><div class="c x2 y25 w2 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">原文地址:http://www.apple.com.cn/developer/Documentation/index.html</div></div><div class="c x8 y27 w3 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">整理:http://www.wikinese.com/forum/</div></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/622b91f015da9b288b3823f5/bg3.jpg"><div class="t m0 x1 h5 y28 ff2 fs1 fc0 sc1 ls1 ws0">面向对象编程提供了一种对您所操作的数据进行抽象的方法<span class="ff4">—</span>而且,面向对象编程将数据和对数据的操作</div><div class="t m0 x1 h5 y4e ff2 fs1 fc0 sc1 ls1 ws0">组合到一起,从而使数据具有了行为。<span class="ff4"> </span></div><div class="t m0 x1 h3 y4f ff1 fs1 fc0 sc0 ls2 ws0">本部分包含如下内容<span class="_ _0"></span>:<span class="ff3 sc1 ls1"> </span></div><div class="t m0 x1 h4 y50 ff2 fs1 fc1 sc1 ls1 ws0">数据和操作</div><div class="t m0 xd h5 y51 ff4 fs1 fc0 sc1 ls3 ws0"> </div><div class="t m0 x1 h4 y52 ff2 fs1 fc1 sc1 ls1 ws0">接口和实现</div><div class="t m0 xd h5 y53 ff4 fs1 fc0 sc1 ls3 ws0"> </div><div class="t m0 x1 h7 y54 ff1 fs3 fc0 sc0 ls1a ws0">数据和操作<span class="ff3 sc1 ls1"> </span></div><div class="t m0 x1 h5 y55 ff2 fs1 fc0 sc1 ls1 ws0">传统的编程语言通常划分成两个部分<span class="ff4">—</span>数据和对数据的操作。数据是静态的,不变的,除非通过操作来改</div><div class="t m0 x1 h5 y56 ff2 fs1 fc0 sc1 ls1 ws0">变它。对数据操作的函数并不保留上一次操作时数据的状态,它们的作用仅体现在操作数据上。<span class="ff4"> </span></div><div class="t m0 x1 h4 y57 ff2 fs1 fc0 sc1 ls1 ws0">很明显,这种划分是基于计算机的工作方式,所以您很难忽视它。和无处不在的原料和能量以及名词和动</div><div class="t m0 x1 h5 y58 ff2 fs1 fc0 sc1 ls1 ws0">词的划分一样,它构成了程序的本质。从某种意义上说,所有的程序员<span class="ff4">—</span>即使是面向对象的程序员<span class="ff4">—</span>都是</div><div class="t m0 x1 h5 y59 ff2 fs1 fc0 sc1 ls1 ws0">工作在数据结构之上,他们的程序也会使用和定义函数来操作数据。<span class="ff4"> </span></div><div class="t m0 x1 h5 y5a ff2 fs1 fc0 sc1 ls1 ws0">对于面向过程编程语言例如<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>来说,<span class="_ _e"></span>这几乎就是一切了。<span class="_ _e"></span>语言本身可能为组织数据和函数提供了多种支持,</div><div class="t m0 x1 h5 y5b ff2 fs1 fc0 sc1 ls1 ws0">但是本质上仍然是分成数据和操作两个部分。函数和数据结构是设计的基本元素。<span class="ff4"> </span></div><div class="t m0 x1 h4 y5c ff2 fs1 fc0 sc1 ls1 ws0">面向对象编程当然不会这样来划分,而是在更高的层次重新组织。它把操作和数据组合为一个模块单元叫</div><div class="t m0 x1 h5 y5d ff2 fs1 fc0 sc1 ls1 ws0">做<span class="sc0 ls2">对象</span><span class="ff4"> <span class="_ _2"> </span></span>,<span class="_ _8"></span>并且把对象组成一个结构化的网络来完成一个程序。<span class="_ _8"></span>在面向对象的编程语言中,<span class="_ _6"></span>对象和对象间的</div><div class="t m0 x1 h5 y5e ff2 fs1 fc0 sc1 ls1 ws0">交互才是设计的基本元素。<span class="ff4"> </span></div><div class="t m0 x1 h4 y5f ff2 fs1 fc0 sc1 ls1 ws0">每个对象都具有状态(数据)和行为(对数据的操作)。也就是说,它们和物理实体并没有太大区别。一</div><div class="t m0 x1 h4 y60 ff2 fs1 fc0 sc1 ls1 ws0">台机械装置例如怀表、钢琴如何体现自己的状态和行为是显而易见的,然而几乎每样功能性的物体都能够</div><div class="t m0 x1 h4 y61 ff2 fs1 fc0 sc1 ls1 ws0">体现自己的状态和行为。即使一个普通的瓶子也会有状态(饼子有多满,瓶子是否已经打开,瓶子所装的</div><div class="t m0 x1 h5 y62 ff2 fs1 fc0 sc1 ls1 ws0">液体温度多少)和行为(以不同的流量倒出所装液体,盖上或者打开,加热或者制冷)。<span class="ff4"> </span></div><div class="t m0 x1 h4 y63 ff2 fs1 fc0 sc1 ls1 ws0">正是这种与实物的相似性赋予了对象强大的能力和吸引力。这些对象不仅可以对现实系统的组件建模,也</div><div class="t m0 x1 h5 y64 ff2 fs1 fc0 sc1 ls1 ws0">能够胜任软件系统中的同样的角色。<span class="ff4"> </span></div><div class="t m0 x1 h7 y65 ff1 fs3 fc0 sc0 ls1a ws0">接口和实现<span class="ff3 sc1 ls1"> </span></div><div class="t m0 x1 h5 y66 ff2 fs1 fc0 sc1 ls1 ws0">编写一个程序,<span class="_ _6"></span>您需要对问题进行抽象,<span class="_ _d"></span><span class="ff4"> <span class="_ _2"> </span><span class="ff2">并使用程序将其表达出来。<span class="_ _6"></span>这正是编程语言帮您做的工作。<span class="_ _d"></span>编程</span></span></div><div class="t m0 x1 h4 y67 ff2 fs1 fc0 sc1 ls1 ws0">语言可以帮助您对抽象后的问题进行编码从而使得程序的编写和设计过程更为简单。它使您只用关注您所</div><div class="t m0 x1 h5 y68 ff2 fs1 fc0 sc1 ls1 ws0">写的代码和程序的架构而无需关心表面的细节。<span class="ff4"> </span></div><div class="t m0 x1 h4 y69 ff2 fs1 fc0 sc1 ls1 ws0">所有的程序语言都提供了对抽象后的问题进行编码的方法。本质上,这些方法就是怎样分离并隐藏实现细</div><div class="t m0 x1 h5 y6a ff2 fs1 fc0 sc1 ls1 ws0">节,然后至少在某种程度上,提供给这些细节一个公共的接口<span class="ff4">—</span>就像机械装置将它的表面和内部的构造分</div><div class="t m0 x1 h5 y6b ff2 fs1 fc0 sc1 ls1 ws0">离一样<span class="ff4">—</span>如图<span class="ff4">"</span>接口和实现<span class="ff4">"</span>所示。<span class="ff4"> </span></div><div class="t m0 x1 h5 y6c ff4 fs1 fc0 sc1 ls1 ws0"> </div><div class="t m0 x1 h3 y6d ff2 fs1 fc0 sc0 ls1 ws0">图<span class="ff3 sc1 lsf ws6"> 2-1 <span class="_ _a"></span> <span class="_ _f"></span><span class="ff2 ls1 ws0">接口和实现<span class="ff4"> </span></span></span></div><div class="c x2 y25 w2 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">原文地址:http://www.apple.com.cn/developer/Documentation/index.html</div></div><div class="c x8 y27 w3 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">整理:http://www.wikinese.com/forum/</div></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m2"></div></a></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/622b91f015da9b288b3823f5/bg4.jpg"><div class="t m0 xe h5 y6e ff4 fs1 fc0 sc1 ls1 ws0"> </div><div class="t m0 x1 h5 y6f ff4 fs1 fc0 sc1 ls1 ws0"> </div><div class="t m0 x1 h4 y70 ff2 fs1 fc0 sc1 ls1 ws0">随着对该装置的观察角度不同,您所关注的层面也不同。作为一个实现者,您需要关心它是由什么构成并</div><div class="t m0 x1 h4 y71 ff2 fs1 fc0 sc1 ls1 ws0">且怎样工作的。作为一个用户,您仅需要关心它是什么并且它能够做什么。您可以略过那些具体的细节而</div><div class="t m0 x1 h5 y72 ff2 fs1 fc0 sc1 ls1 ws0">从更高层次来考虑问题。<span class="ff4"> </span></div><div class="t m0 x1 h5 y73 ff2 fs1 fc0 sc1 ls1 ws0">在<span class="_ _2"> </span><span class="ff4">C<span class="_"> </span></span>语言中,程序的基本单位是结构体和函数,这两者从不同的方面隐藏了具体实现细节。<span class="ff4"> </span></div><div class="t m0 x4 h6 y74 ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="ff2 fs1">从数据方面,<span class="ff4">C<span class="_ _2"> </span></span>中的结构体<span class="_ _4"></span>把数据组合成一个更大的单位从而可以象一个单独的实体一样对它进</span></span></div><div class="t m0 x7 h4 y75 ff2 fs1 fc0 sc1 ls1 ws0">行操作。<span class="_ _a"></span>尽管有时候代码需要访问结构体内部的数据,<span class="_ _8"></span>但程序一般都将结构体作为一个单独的数据实</div><div class="t m0 x7 h5 y76 ff2 fs1 fc0 sc1 ls1 ws0">体来对待<span class="ff4">—</span>而不是数据的集合。结构体能包含另一个结构体,从而组成复杂的数据结构。<span class="ff4"> </span></div><div class="t m0 x7 h5 y77 ff2 fs1 fc0 sc1 ls1 ws0">在现代<span class="_ _7"> </span><span class="ff4">C<span class="_ _7"> </span></span>语言中,结构体中的数据元素位于该结构体的名字空间<span class="ff4">—</span>也就是说,结构体内的元素名字</div><div class="t m0 x7 h5 y78 ff2 fs1 fc0 sc1 ls2 ws0">不会和结构体外的<span class="_ _0"></span>同名元素冲突。<span class="ff4 ls1"> <span class="_ _2"> </span><span class="ff2">划分名字空间对保证实现细节和接口<span class="_ _4"></span>的分离来说是非常<span class="_ _4"></span>必要的。</span></span></div><div class="t m0 x7 h4 y79 ff2 fs1 fc0 sc1 ls1 ws0">例如,<span class="_ _a"></span>试想一下,<span class="_ _8"></span>在一个大规模的程序中给每个数据元素赋予一个不同的名字并且保证新的命名不会</div><div class="t m0 x7 h5 y7a ff2 fs1 fc0 sc1 ls1 ws0">和已存在的命名冲突是一件多么巨大的工作。<span class="ff4"> </span></div><div class="t m0 x4 h6 y7b ff5 fs2 fc0 sc1 ls1 ws0"><span class="ff4"> <span class="_ _1"> </span><span class="ff2 fs1">从过程方面,<span class="_ _8"></span>函数封装了一些可以重复使用而不用重新实现的行为<span class="_ _6"></span>(操作)<span class="_ _b"></span>。<span class="_ _8"></span>和结构体的数据元素</span></span></div><div class="t m0 x7 h4 y7c ff2 fs1 fc0 sc1 ls1 ws0">一样,<span class="_ _8"></span>函数中局部变量也处于该函数自己的名字空间。<span class="_ _6"></span>函数可以调用其他的函数,<span class="_ _8"></span>从而组成复杂的逻</div><div class="t m0 x7 h5 y7d ff2 fs1 fc0 sc1 ls1 ws0">辑。<span class="ff4"> </span></div><div class="t m0 x7 h4 y7e ff2 fs1 fc0 sc1 ls1 ws0">函数是可复用的。<span class="_ _8"></span>一旦函数被定义,<span class="_ _6"></span>则可以不限次的调用而无需再重新实现。<span class="_ _8"></span>一些被广泛使用的函数</div><div class="t m0 x7 h4 y7f ff2 fs1 fc0 sc1 ls1 ws0">可能被收集在函数库中并且在不同的应用程序中被重用。<span class="_ _a"></span>用户只需要函数的接口,<span class="_ _8"></span>而不需要知道函数</div><div class="t m0 x7 h5 y80 ff2 fs1 fc0 sc1 ls1 ws0">的实现。<span class="ff4"> </span></div><div class="t m0 x7 h4 y81 ff2 fs1 fc0 sc1 ls1 ws0">然而,和结构体中数据元素不同的是,函数并没有划分不同的名字空间。每个函数的名字必须唯一。</div><div class="t m0 x7 h5 y82 ff2 fs1 fc0 sc1 ls1 ws0">尽管函数是可复用的,但函数名不是。<span class="ff4"> </span></div><div class="t m0 x1 h5 y83 ff4 fs1 fc0 sc1 ls1 ws0">C<span class="_ _2"> </span><span class="ff2">语言中的结<span class="_ _4"></span>构体和函数都能够帮助您对问题进行抽象,但是它们仍然区分了数据和对数据的操作。在面</span></div><div class="t m0 x1 h4 y84 ff2 fs1 fc0 sc1 ls1 ws0">向过程的编程语言中,问题要么被抽象成数据,要么被抽象成操作。您的程序总是按照计算机的工作方式</div><div class="t m0 x1 h5 y85 ff2 fs1 fc0 sc1 ls1 ws0">去设计。<span class="ff4"> </span></div><div class="t m0 x1 h5 y86 ff2 fs1 fc0 sc1 ls1 ws0">面向对象的语言没有抛弃结构体和函数的优点<span class="ff4">—</span>它更深入了一步,将问题抽象成更高层次的单位,从而隐</div><div class="t m0 x1 h5 y87 ff2 fs1 fc0 sc1 ls1 ws0">藏了函数和数据之间的交互。<span class="ff4"> </span></div><div class="t m0 x1 h4 y88 ff2 fs1 fc0 sc1 ls1 ws0">例如,假设您有一组函数(接口)作用于某个特定的数据结构。您希望这些数据结构和接口无关从而使得</div><div class="t m0 x1 h5 y89 ff2 fs1 fc0 sc1 ls1 ws0">这些函数尽可能的易于使用,所以提供了一些额外的函数来管理这些数据。所有对该数据结构的操作<span class="ff4">—</span>分</div><div class="t m0 x1 h5 y8a ff2 fs1 fc0 sc1 ls1 ws0">配内存空间,初始化,获取数据,更改数据,更新数据,释放内存空间<span class="ff4">—</span>都通过这些额外的函数来进行。</div><div class="t m0 x1 h5 y8b ff2 fs1 fc0 sc1 ls1 ws0">用户所需要做的只是以该数据结构为参数调用这些函数。<span class="ff4"> </span></div><div class="t m0 x1 h4 y8c ff2 fs1 fc0 sc1 ls1 ws0">这样,该数据结构对其他的程序员来说是不透明的,他们无需关心该数据结构的内部构成,从而专注于函</div><div class="t m0 x1 h5 y8d ff2 fs1 fc0 sc1 ls1 ws0">数的功能,而不是该数据结构。到现在为止,您已经完成了创建对象的第一步。<span class="ff4"> </span></div><div class="c x2 y25 w2 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">原文地址:http://www.apple.com.cn/developer/Documentation/index.html</div></div><div class="c x8 y27 w3 hb"><div class="t m0 x0 hc y26 ff7 fs6 fc0 sc1 ls1 ws0">整理:http://www.wikinese.com/forum/</div></div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>