<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>冒号论坛 &#187; Tag: data-abstraction - Recent Posts</title>
		<link>http://bbs.zhenghui.org/tags/data-abstraction</link>
		<description>冒号论坛 &raquo; Tag: data-abstraction - Recent Posts</description>
		<language>en-US</language>
		<pubDate>Wed, 08 Sep 2010 12:50:41 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://bbs.zhenghui.org/search.php</link>
		</textInput>
		<atom:link href="http://bbs.zhenghui.org/rss/tags/data-abstraction" rel="self" type="application/rss+xml" />

		<item>
			<title>Todd on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-112</link>
			<pubDate>Wed, 19 May 2010 16:37:20 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">112@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;最近在看系统论方面的书，系统论中有一个关于变化和不变的论述：只有通过变化才能理解不变。这让我突然对“测试”有所感悟，测试就是通过变化寻找不变的过程。这里的“测试”还包括生活中的例子，比如要了解一个人的品质，我们需要通过很多事例，这些事例是变化的，但通过这些变化的事例我们能体会到这个人品质中的某些不变特征。&#60;/p&#62;
&#60;p&#62;上面的感悟不一定对，随感而发。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>hui on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-72</link>
			<pubDate>Tue, 02 Mar 2010 20:15:29 +0000</pubDate>
			<dc:creator>hui</dc:creator>
			<guid isPermaLink="false">72@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;你的理解非常正确。请注意以上我提到的那句话：“数据抽象不是在&#60;strong&#62;类的&#60;/strong&#62;实现过程中发生的，而是在&#60;strong&#62;类的&#60;/strong&#62;设计阶段发生的”，特意分别在实现和设计前面加了修饰词“类的”。&#60;br /&#62;
这也再次印证书中的一句话：“与其区分设计与实现，不如把握抽象的级别”
&#60;/p&#62;</description>
		</item>
		<item>
			<title>rstevens on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-71</link>
			<pubDate>Tue, 02 Mar 2010 19:41:21 +0000</pubDate>
			<dc:creator>rstevens</dc:creator>
			<guid isPermaLink="false">71@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;谢谢及时回复，我之所以理解混论，主要是纠结于书中所说的“数据抽象发生在实现阶段”。&#60;/p&#62;
&#60;p&#62;这样理解或许更为准确：&#60;/p&#62;
&#60;p&#62;1、从分析、设计、实现的层次看，数据抽象发生在实现阶段，（书中所说，数据冲向是实现阶段的五种抽象之一）。具体来说，就是在实现一个类的过程中。 &#60;/p&#62;
&#60;p&#62;2、在实现一个类的过程中，又自然的分为“设计”与“实现”两个步骤，或者两个过程； 因为在实现之前，必然有一个设计的思考过程。数据抽象就发生在这个阶段的“设计”过程中。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>hui on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-70</link>
			<pubDate>Tue, 02 Mar 2010 19:39:08 +0000</pubDate>
			<dc:creator>hui</dc:creator>
			<guid isPermaLink="false">70@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;&#38;gt;&#38;gt;1、 如果说先有了“接口规范”，并且“数据抽象”是在定义出类的对外接口（API）就完成了，那么实际上在定义完“接口规范”的时候，就已经完成了“数据抽象”&#60;br /&#62;
2、 更接近实际的情况时，并没有“接口规范”，但是需要实现一个类，或者已经实现了一个类；在优化代码的过程中，通过“数据抽象”，提炼出类的对外行为规范，设计出接口（API），并将内部实现封装起来； 整个过程，称为“数据抽象”。&#60;/p&#62;
&#60;p&#62;没错，你提到的第一点是比较理想的过程，第二点是比较实际的过程。但值得指出的是，后者是一个从已有的实现中重新设计的过程，即refactoring。需要refactoring意味着原来设计不尽合理，其原因主要有两种：一是程序员对数据抽象的认识不够或重视不够，在没有设计好API之前就匆匆写实现代码；二是该类的上层类/客户类因自身设计原因或外部需求变化原因发生改变，从而导致类的接口改变。&#60;br /&#62;
在类的hierarchy设计中，类似的情况也时有发生。有时是先有超类，后有子类；有时是从一些类中提炼出超类。这不奇怪，没有人能从一开始就设计出一个完美的系统，因此会交替在高层抽象（接口、超类）和低层抽象（实现、子类）之间往返（top-down/bottom-up）。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>hui on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-69</link>
			<pubDate>Tue, 02 Mar 2010 19:16:14 +0000</pubDate>
			<dc:creator>hui</dc:creator>
			<guid isPermaLink="false">69@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;&#38;gt;&#38;gt;我理解，抽象是一种思维的“过程”，包括思考发生的场合（层次）、思考的方式（如何筛选）&#60;/p&#62;
&#60;p&#62;1。根据上下文，抽象可以指思维的“过程”，也可以指思维的“结果”。&#60;br /&#62;
2。思考发生的场合与层次有关，但不完全等同。抽象的层次越高，忽略的（实现）细节越多。&#60;/p&#62;
&#60;p&#62;&#38;gt;&#38;gt;1、数据抽象发生在实现阶段，通常是在如何实现一个类的过程中发生的。&#60;/p&#62;
&#60;p&#62;数据抽象不是在类的实现过程中发生的，而是在类的设计阶段发生的。事实上，数据抽象的意义正是在于：给定一个API，可以有不同的实现方式。在现实中，不少程序员在API没有规范好之前就开始动手写实现代码，但这不是一种值得推荐的做法。当然，这里也有个抽象层次问题——如果一个类比较底层，仅仅是为另一个高层类提供内部服务，这个要求可以稍微放宽。&#60;/p&#62;
&#60;p&#62;&#38;gt;&#38;gt;2、 在进行数据抽象之前，已进行了“规范抽象”，提炼出了“接口规范”&#60;/p&#62;
&#60;p&#62;这么说可能更好：数据抽象是借助（或依赖）了“规范抽象”，不必把它们硬性分开。&#60;/p&#62;
&#60;p&#62;&#38;gt;&#38;gt;3、 数据抽象是将“接口规范”映射到具体实现（通常指一个类）的过程&#60;br /&#62;
从设计者的角度看，数据抽象是形成“接口规范”的过程；从客户的角度看，数据抽象是忽略具体实现的保证。&#60;/p&#62;
&#60;p&#62;&#38;gt;&#38;gt;4、抽象的方式是，按照“接口规范”定义出类的对外接口（API）；到此为止，“数据抽象”已经结束&#60;/p&#62;
&#60;p&#62;这种说法是对的，但不是与你前面提出的1和3矛盾吗？事实上，你在后来的两个帖子中也意识到这个矛盾了:)&#60;/p&#62;
&#60;p&#62;&#38;gt;&#38;gt;5、 数据抽象完成后，再考虑类的具体实现；围绕的是数据的组织方式、算法实现进行的；这些具体实现通过封装机制隐藏起来。&#60;/p&#62;
&#60;p&#62;正确。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>rstevens on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-68</link>
			<pubDate>Tue, 02 Mar 2010 18:46:47 +0000</pubDate>
			<dc:creator>rstevens</dc:creator>
			<guid isPermaLink="false">68@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;如果说先有“接口规范”， 那么数据抽象就是提炼“接口规范”的过程，因此处于设计阶段；&#60;br /&#62;
如果说先有了一个类的实现，那么数据抽象就是优化类的实现的过程，处于实现阶段；&#60;/p&#62;
&#60;p&#62;晕了晕了，呵
&#60;/p&#62;</description>
		</item>
		<item>
			<title>rstevens on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-67</link>
			<pubDate>Tue, 02 Mar 2010 18:40:52 +0000</pubDate>
			<dc:creator>rstevens</dc:creator>
			<guid isPermaLink="false">67@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;一些困惑的地方：&#60;br /&#62;
1、 如果说先有了“接口规范”，并且“数据抽象”是在定义出类的对外接口（API）就完成了，那么实际上在定义完“接口规范”的时候，就已经完成了“数据抽象”&#60;/p&#62;
&#60;p&#62;2、 更接近实际的情况时，并没有“接口规范”，但是需要实现一个类，或者已经实现了一个类；在优化代码的过程中，通过“数据抽象”，提炼出类的对外行为规范，设计出接口（API），并将内部实现封装起来； 整个过程，称为“数据抽象”。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>rstevens on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-66</link>
			<pubDate>Tue, 02 Mar 2010 18:29:19 +0000</pubDate>
			<dc:creator>rstevens</dc:creator>
			<guid isPermaLink="false">66@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;郑老师：最近一直在做《冒号课堂》的读书笔记，在整个书中，最重要的观点就是“抽象”&#60;/p&#62;
&#60;p&#62;如你所总结的， “在编程设计过程中所谓的抽象，是指在一定的视角和一定的层次上，对问题域的一种筛选——筛下表面，留住本质；筛下差异，留住共性；筛下实现，留住规范；筛下how to do，留住what to do。”&#60;/p&#62;
&#60;p&#62;我理解，抽象是一种思维的“过程”，包括思考发生的场合（层次）、思考的方式（如何筛选）&#60;/p&#62;
&#60;p&#62;如果这个理解是对的话，那么我对 7.2 节“数据抽象”的理解如下：&#60;/p&#62;
&#60;p&#62;1、 数据抽象发生在实现阶段，通常是在如何实现一个类的过程中发生的。&#60;br /&#62;
2、 在进行数据抽象之前，已进行了“规范抽象”，提炼出了“接口规范”&#60;br /&#62;
3、 数据抽象是将“接口规范”映射到具体实现（通常指一个类）的过程&#60;br /&#62;
4、 抽象的方式是，按照“接口规范”定义出类的对外接口（API）；到此为止，“数据抽象”已经结束&#60;br /&#62;
5、 数据抽象完成后，再考虑类的具体实现；围绕的是数据的组织方式、算法实现进行的；这些具体实现通过封装机制隐藏起来。&#60;/p&#62;
&#60;p&#62;我感觉这种理解方式比较教条和生硬，并不符合实际情况，但是表达起来，更让人容易理解。&#60;br /&#62;
想听听你的看法。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>semoon on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-41</link>
			<pubDate>Sat, 06 Feb 2010 12:57:59 +0000</pubDate>
			<dc:creator>semoon</dc:creator>
			<guid isPermaLink="false">41@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;学习学习!~
&#60;/p&#62;</description>
		</item>
		<item>
			<title>waterinfire on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-18</link>
			<pubDate>Fri, 08 Jan 2010 16:28:32 +0000</pubDate>
			<dc:creator>waterinfire</dc:creator>
			<guid isPermaLink="false">18@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;从变化的角度看，我们可以这样理解，抽象的过程就是把握好事物变化中的不变性，做好变与不变的平衡关系。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>hui on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-8</link>
			<pubDate>Sun, 03 Jan 2010 13:39:59 +0000</pubDate>
			<dc:creator>hui</dc:creator>
			<guid isPermaLink="false">8@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;边读边悟式的读书方式是最理想的，可惜大多数人嫌其过于费时费神而宁愿采取囫囵吞枣式:-(&#60;/p&#62;
&#60;p&#62;编程不仅仅是程序员与计算机之间的交流，同时也是程序员与程序员之间的交流（即便是一人开发的程序，那也是过去的他、现在的他和未来的他之间的交流）。前者更关心一个程序&#60;em&#62;正确性&#60;/em&#62;，后者更关心一个程序的&#60;em&#62;合理性&#60;/em&#62;。合理性很大程度上体现在：合理的抽象角度、合理的抽象层次、合理的抽象工具、合理的抽象表达等等，这些对提高代码的可理解性、可维护性、可扩展性、可重用性、可测试性等等起着&#60;strong&#62;决定性&#60;/strong&#62;的作用。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-7</link>
			<pubDate>Sun, 03 Jan 2010 09:32:39 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">7@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;刚把全书看完，一句话“营养太丰富了，需要慢慢消化”。&#60;/p&#62;
&#60;p&#62;看完全书，尤其是最后一节之后，发现书中关于“抽象是什么”其实很多地方都有讲到，包括前面“减法和除法”。我提那个问题的原因是看了书的大部分以后，觉得抽象很重要，但对“抽象是什么”还没有形成一个核心的印象，也就是说还没有内化成自己的东西。然后，经过思考和总结，提炼成“变中的不变”，并且意识到抽象需要显化。最后，当我再回过头来看书中关于抽象的描述时，理解就更深了，而且书中也明确提到抽象需要“显化，固化，标准化”。&#60;/p&#62;
&#60;p&#62;我感觉对于这样一本书，光尝试直接去理解书中的字句是什么意思不是好的学习方法。有时候要先跳出来，先悟一悟，再看书就恍然大悟了。比如，上面提到的“显化，固化，标准化”，书中只有简单的一句，如果不是读者自己有体会，很可能会忽略掉它。再比如，书中关于“单质，混合物，化合物”的比喻，光尝试从字面去理解还是有困难的，但是当自己真正体会到了以后，再来看书，一下子就看懂了。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>hui on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-6</link>
			<pubDate>Fri, 01 Jan 2010 15:04:18 +0000</pubDate>
			<dc:creator>hui</dc:creator>
			<guid isPermaLink="false">6@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;这个问题极好，表明你抓住了《冒号课堂》最重要的一个主线。但你提出此问题也表明：《冒号课堂》对抽象的阐述还不够全面、不够深入、不够透彻、不够实在。事实上，我正在酝酿一个想法：以抽象为主题，把编程中的重要概念、编程语言、编程范式、设计思想、设计模式等等一线贯穿。故而在此对该问题无法一言道尽。简单地说，在编程设计过程中所谓的抽象，是指在一定的&#60;strong&#62;视角&#60;/strong&#62;和一定的&#60;strong&#62;层次&#60;/strong&#62;上，对问题域的一种&#60;strong&#62;筛选&#60;/strong&#62;——筛下表面，留住本质；筛下差异，留住共性；筛下实现，留住规范；筛下how to do，留住what to do。你的理解从某种意义上说也是正确的——本质、共性、规范、what to do正是&#60;em&#62;变中的不变&#60;/em&#62;。
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Todd on "抽象是什么？"</title>
			<link>http://bbs.zhenghui.org/topic/%e6%8a%bd%e8%b1%a1%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f#post-5</link>
			<pubDate>Fri, 01 Jan 2010 13:30:06 +0000</pubDate>
			<dc:creator>Todd</dc:creator>
			<guid isPermaLink="false">5@http://bbs.zhenghui.org/</guid>
			<description>&#60;p&#62;看了本书以后，我对“抽象”的感觉提高了。但对于程序设计来讲，到底抽象是什么呢？我现在的答案是“抽象就是变化中的不变”。封装，继承，多态，还有设计原则和设计模式是帮助把不变显式化的机制。
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
