《语义网基础教程》学习笔记(一)

一、XML概述

1、有效(valid)的XML文档:遵守了XML文档的基本规则,并使用DTD或Schema定义了语义约束,而且也完全遵守了DTD或Schema所定义的语义约束的XML文档

2、XML声明部分的encoding属性值应该与保存该文档所使用的字符集相同。如果需要让XML支持中文,应该注意以下几点:

①保存文件时使用支持中文的字符集

②XML声明部分的encoding属性应该与保存该文件时所使用的字符集相同

3、XML元素里的多个属性之间是无序的,因此同一个元素不可包含多个同名的属性,XML元素的属性必须有属性值;

XML的子元素则是有序的,因此同一个元素可以包含多个同名的子元素;子元素顺序不同,则XML文档所表达的意义也就不同了。

这正如Java集合里的Set和List,Set代表无序元素,集合不可重复。List代表元素有序,集合元素可以重复的集合。

4、空元素:

如<book></book>等价与<book />但与<book> </book>不同,注意空元素与元素内容为空的区别

空元素可以接受多个属性如:<book name="Hadoop权威指南" price="12.8"></book>

5、W3C观点:元数据才应该存储为属性,而数据本身则应该存储为元素。应该尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。

在实际开发中如果使用XML交换数据,优先考虑使用子元素来存储数据。用子元素的缺点是XML文档会变得臃肿。

6、语义约束:

使用XML交换数据的双方相互约定一套规则,XML创建者按这套规则保存信息,而XML接受者按这套规则读取信息。这套规则应该以一种独立的形式存在,然后交给XML创建者和使用者共同遵守。XML将其称为语义约束。

7、内部DTD例子

注:<!ELEMENT 计算机书 (书名,作者,价格,介绍)>这一行定义的子元素有严格的顺序要求,XML文档中要遵守

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- 内部DTD,指定了文档的根元素:书籍列表-->
<!DOCTYPE 书籍列表[
<!ELEMENT 书籍列表 (计算机书)*>
<!ELEMENT 计算机书 (书名,作者,价格,介绍)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 介绍 (#PCDATA)>
]>

<书籍列表>
<计算机书>
<书名>hadoop权威指南</书名>
<作者>zpc</作者>
<价格>22</价格>
<介绍>该书介绍了Hadoop的技术</介绍>
</计算机书>
</书籍列表>

8、外部DTD

<!DOCTYPE 根元素名
SYSTEM "外部DTD的URI"
>
如:
<!DOCTYPE 书籍列表
SYSTEM "http://www.haodianying.org/dtd/book.dtd"
>

<!DOCTYPE 书籍列表
SYSTEM "book.dtd"
>
外部DTD例子:
book.dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 书籍列表 (计算机书)*>
<!ELEMENT 计算机书 (书名,作者,价格,介绍)>
<!ELEMENT	书名 (#PCDATA)>
<!ELEMENT   作者 (#PCDATA)>
<!ELEMENT	价格 (#PCDATA)>
<!ELEMENT	介绍 (#PCDATA)>

outer.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书籍列表 SYSTEM "C:\Documents and Settings\zhou\桌面\book.dtd">
<书籍列表>
<计算机书>
<书名>hadoop权威指南</书名>
<作者>zpc</作者>
<价格>22</价格>
<介绍>该书介绍了Hadoop的技术</介绍>
</计算机书>
</书籍列表>

9、共用DTD,一般由某个权威机构定制,通过PUBLIC关键字引入,使用共用DTD时还需给共用DTD指定一个标识名。

引用公用DTD的格式:

<!DOCTYPE 根元素

PUBLIC "DTD的标识名" "公用DTD的URI">

10、DTD必须定义XML文档中出现的所有元素。

11、每个<!ATTLIST...>定义一个属性

属性的约束规则:#REQUIRED(必须的属性)、#IMPLIED(可有可无)、#FIXED(属性值是固定的)

12、实体是可以自定义的

定义:<!ENTITY java "疯狂Java讲义">

引用:&java;

大多数时候定义实体都是为了减少字符输入

定义参数实体(只比定义普通实体多了个%)

<!ENTITY % 实体名 "实体值">

引用:%实体名;

注:参数实体一定要先定义后使用,而且参数实体只能在DTD中使用

定义外部实体

<!ENTITY 实体名 SYSTEM "实体所在文件的URI">

注:保存外部实体值的外部文件必须满足:该文件是一个文本文件、该文件是满足XML要求的结构化文档

13、Schema概述及其优势

XML Schema是DTD的替代者,它采用了标准的XML语法来定义XML文档语义约束,不仅可以定义XML文档的结构还可以定义XML文档的内容约束

<schema>元素是每一个XML Schema的根元素:

<?xml version="1.0"?>

<xs:schema>

...

...

</xs:schema>

<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3school.com.cn"

xmlns="http://www.w3school.com.cn"

elementFormDefault="qualified">

...

...

</xs:schema>

解释:

xmlns:xs="http://www.w3.org/2001/XMLSchema"

显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间"http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:

targetNamespace="http://www.w3school.com.cn"

显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。

xmlns="http://www.w3school.com.cn"

指出默认的命名空间是 "http://www.w3school.com.cn"。

elementFormDefault="qualified"

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

14、一个学习xml的主页:http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=7076

15、Schema的数据类型

(1)字符串相关类型

(2)数值类型

(3)日期类型

(4)boolean类型

(5)anyURI类型

(6)二进制数据

16、使用限制派生新类型

 例子1:
order1.xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  >
	<xsd:element name="order">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="orderItem" maxOccurs="10"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="orderItem">
		<xsd:complexType>
			<xsd:sequence>
				<!--自定义的两个类型-->
				<xsd:element name="id" type="idType"/>
				<xsd:element name="quantity" type="quantityType"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:simpleType name="idType">
		<xsd:restriction base="xsd:string">
			<!--枚举类型-->
			<xsd:enumeration value="7-5058-3496-7"/>
			<xsd:enumeration value="7-5005-6450-3"/>
			<xsd:enumeration value="7-3020-6069-7"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="quantityType">
		<xsd:restriction base="xsd:integer">
			<xsd:minInclusive value="1"/>
			<xsd:maxInclusive value="10"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>

order1.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<order xmlns:xi="http://www.w3.org/2001/XMLSchema-instance" xi:noNamespaceSchemaLocation="file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/order1.xsd">
	<orderItem>
		<id>7-5005-6450-3</id>
		<quantity>5</quantity>
	</orderItem>
</order>
注意:在XML Schema的根元素下定义的任何元素都可以作为XML文档的根元素使用,因此上面的order1.xml也可以写成下面的格式
<?xml version="1.0" encoding="UTF-8"?>
<orderItem xmlns:xi="http://www.w3.org/2001/XMLSchema-instance" xi:noNamespaceSchemaLocation="file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/order1.xsd">
<id>7-3020-6069-7</id>
<quantity>2</quantity>
</orderItem>

   例子2:
age.xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- 定义新类型-->
<zpc:simpleType name="age_Type">
	<zpc:restriction base="zpc:int">
	    <!--最大值100、最小值0-->
		<zpc:maxInclusive value="100"/>
		<zpc:minInclusive value="0"/>
	</zpc:restriction>
</zpc:simpleType>
<!--定义age元素,它的类型是age_Type-->
<zpc:element name="age" type="age_Type"/>
</zpc:schema>

age.xml
<?xml version="1.0" encoding="UTF-8"?>
<age xmlns:niao="http://www.w3.org/2001/XMLSchema-instance" niao:noNamespaceSchemaLocation="file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/test2.xsd">
<!--上述schema限制了age的取值范围-->
33
</age>

例子3:
price.xsd
<?xml version="1.0" encoding="UTF-8"?>
<zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<zpc:simpleType name="price_Type">
		<zpc:restriction base="zpc:decimal">
			<zpc:maxInclusive value="100"/>
			<zpc:minInclusive value="0"/>
			<!-- 最多5位数,小数点最后最多2位-->
			<zpc:fractionDigits value="2"/>
			<zpc:totalDigits value="5"/>
		</zpc:restriction>
	</zpc:simpleType>
	<zpc:element name="price" type="price_Type"/>
</zpc:schema>

price.xml
<?xml version="1.0" encoding="UTF-8"?>
<price xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/test3.xsd">
23.34
</price>

例子4:
这次我们给出一个更加复杂一些的文档:
address.xml
---------------
<customer>
  <name>Teiki</name>
  <address>
    <!-- address追加一个地址子元素 -->
    <prefecture>Zhejiang</prefecture>
    <city>Hangzhou</city>
    <street>Xilu Road, No.121, 7F</street>
  </address>
</customer>

为此,我们需要一个更加复杂一点的Schema文档:
address.xsd
-----------------
1: <?xml version="1.0"?>
2: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3:
4:   <xsd:element name="customer">
5:     <xsd:complexType>
6:       <xsd:sequence>
7:         <xsd:element name="name" type="xsd:string"/>
8:         <!-- 追加子元素address-->
9:         <xsd:element name="address">
10:          <xsd:complexType>
11:            <xsd:sequence>
12:              <xsd:element name="prefecture" type="xsd:string"/>
13:              <xsd:element name="city" type="xsd:string" />
14:              <xsd:element name="street" type="xsd:string" />
15:            </xsd:sequence>
16:          </xsd:complexType>
17:        </xsd:element>
18:        <!-- end -->
19:      </xsd:sequence>
20:    </xsd:complexType>
21:  </xsd:element>
22:
23:</xsd:schema>

不过,我们还可以采用ref元素来重新编写这个Schema文档:
address2.xsd
----------------------
1: <?xml version="1.0"?>
2: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3:
4:   <xsd:element name="customer">
5:     <xsd:complexType>
6:       <xsd:sequence>
7:         <xsd:element name="name" type="xsd:string"/>
8:         <xsd:element ref="address"/>
9:       </xsd:sequence>
10:    </xsd:complexType>
11:  </xsd:element>
12:
13:  <xsd:element name="address">
14:    <xsd:complexType>
15:      <xsd:sequence>
16:        <xsd:element name="prefecture" type="xsd:string"/>
17:        <xsd:element name="city" type="xsd:string" />
18:        <xsd:element name="street" type="xsd:string" />
19:      </xsd:sequence>
20:    </xsd:complexType>
21:  </xsd:element>
22:
23: </xsd:schema>
使用ref元素可以直接将其指向另一个模块,使文档更加具有可读性。

例子5:正则表达式约束
pattern.xsd
<?xml version="1.0" encoding="UTF-8"?>
<zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"  >
<!--定义一种新的数据类型-->
<zpc:simpleType name="price_Type">
	<zpc:restriction base="zpc:decimal">
		<!--必须匹配1XX.X的格式-->
		<zpc:pattern value="1\d{2}\.\d"/>
	</zpc:restriction>
</zpc:simpleType>
<!--定义元素-->
<zpc:element name="price" type="price_Type"/>
</zpc:schema>

price.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<price xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/pattern.xsd">
122.3
</price>

例子6:使用<list.../>派生列表类型
list.xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<zpc:simpleType name="age_list_Type">
	<zpc:list>
	<zpc:simpleType>
		<zpc:restriction base="zpc:int">
				<zpc:maxInclusive value="100"/>
				<zpc:minExclusive value="0"/>
		</zpc:restriction>
	</zpc:simpleType>
	</zpc:list>
</zpc:simpleType>
<zpc:element name="age_list" type="age_list_Type"/>
</zpc:schema>

list.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<age_list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/list.xsd">
12
23
</age_list>

14、合并多个schema

included.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" >
<zpc:simpleType name="age_Type">
	<zpc:restriction base="zpc:int">
	<zpc:maxExclusive value="100"/>
	<zpc:minExclusive value="0"/>
	</zpc:restriction>
</zpc:simpleType>
</zpc:schema>

include.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<zpc:schema xmlns:zpc="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://www.zpc.org" xmlns="http://www.zpc.org">
<zpc:include schemaLocation="included.xsd"/>
<zpc:element name="age" type="age_Type"/>
</zpc:schema>

在XML文件中引用include.xsd
<?xml version="1.0" encoding="UTF-8"?>
<age xmlns="http://www.zpc.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zpc.org file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/include.xsd">
23
</age>

15、可以使用redefine元素重定义被包含schema里的组件

16、使用include包含的schema要么没有目标命名空间,要么其目标命名空间与当前schema的目标命名空间相同
    使用import包含的schema要么没有目标命名空间,要么其目标命名空间与当前schema的目标命名空间不同
例子:
imported.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"   targetNamespace="http://zpc.com" xmlns="http://zpc.com">
<xs:simpleType name="age_Type">
	<xs:restriction base="xs:int">
	<xs:maxExclusive value="100"/>
	<xs:minExclusive value="0"/>
	</xs:restriction>
</xs:simpleType>
</xs:schema>

import.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"   targetNamespace="http://www.zpc2.com" xmlns="http://www.zpc2.com" xmlns:zpc="http://zpc.com">
<!--导入名为imported.xsd的schema,被导入的schema的命名空间是http://zpc.com-->
<xs:import schemaLocation="imported.xsd" namespace="http://zpc.com"/>
<xs:element name="age" type="zpc:age_Type"/>
</xs:schema>

17、命名空间详解

例子1:
namespace.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.zpc.com/schema" xmlns="http://www.zpc.com/schema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义一个book-list元素-->
<xs:element name="book-list">
<xs:complexType>
<xs:sequence>
<!--使用当前schema里的book元素,因为当前schema位于http://www.zpc.com/schema命名空间下,而且该命名空间没有指定对应限定短名,因此按如下格式使用book元素-->
<xs:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--定义一个item_Type复杂类型-->
<xs:complexType name="item_Type">
<xs:sequence>
<xs:element name="book-name" type="xs:token"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<!--这里使用http://www.zpc.com/schema下的item_Type类型时无需指定命名空间前缀-->
<xs:element name="book" type="item_Type"/>
</xs:schema>

对应的合格的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<book-list xmlns="http://www.zpc.com/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zpc.com/schema file:///C:/Documents%20and%20Settings/zhou/%e6%a1%8c%e9%9d%a2/namespace.xsd">
	<book>
		<book-name/>
		<price>1</price>
	</book>
	<book>
		<book-name></book-name>
		<price>3</price>
	</book>
</book-list>

例子2:增加了命名空间前缀
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.zpc.com/schema" xmlns:zpc="http://www.zpc.com/schema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义一个book-list元素-->
<xs:element name="book-list">
<xs:complexType>
<xs:sequence>
<!--使用当前schema里的book元素,因为当前schema位于http://www.zpc.com/schema命名空间下,而且该命名空间指定了对应限定短名zpc,因此按如下格式使用book元素-->
<xs:element ref="zpc:book" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--定义一个item_Type复杂类型-->
<xs:complexType name="item_Type">
<xs:sequence>
<xs:element name="book-name" type="xs:token"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<!--使用http://www.zpc.com/schema下的item_Type类型时必须指定命名空间前缀-->
<xs:element name="book" type="zpc:item_Type"/>
</xs:schema>

例子3:XML允许为任何元素指定xmlns:prefix属性
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.zpc.com/schema" xmlns:zpc="http://www.zpc.com/schema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--定义一个book-list元素-->
<xs:element name="book-list">
<xs:complexType>
<xs:sequence xmlns:java="http://www.zpc.com/schema">
<!--使用当前schema里的book元素,因为当前schema位于http://www.zpc.com/schema命名空间下,而且该命名空间也对应限定短名java,因此这里的限定名可以使用两种-->
<xs:element ref="java:book" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--定义一个item_Type复杂类型-->
<xs:complexType name="item_Type">
<xs:sequence>
<xs:element name="book-name" type="xs:token"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<!--限定名java只能作用在上面的位置,因为为某个元素指定了xmlns:prefix属性之后,该属性所引入的命名空间只对该元素及其子元素有效-->
<xs:element name="book" type="zpc:item_Type"/>
</xs:schema>

在模式文档中,我们很容易就能区分出不同名称空间中的元素和类型,带有xs前缀的元素和类型属于http://www.w3.org/2001/XMLSchema名称空间,而其他的元素和类型则属于目标名称空间。

★需要注意的是,只有模式文档中的全局元素和全局属性才属于目标名称空间。

上例中book-list、item_Type都是全局的,而book-name、price是局部元素。

如果要限定局部元素和属性,可以通过xs:schema元素的elementFormDefault和attibuteFormDefault属性来设置。

为了指定模式文档中局部声明的元素必须被限定,可以将xs:schema元素的elementFormDefault属性的值设为"qualified"。

18、当需要在Schema中对指定命名空间下的元素(或属性)添加一致性约束时,必须为其添加短语作为前缀,否则一致性约束会认为只是对未命名

空间的元素(或属性)添加约束。

由于属性总是属于某个元素的,XML文档用户很容易确定该属性所处的命名空间-总是处于其所属元素所处的命名空间,因此通常无需添加限定短名

作为前缀,所以Schema中通常会指定attributeFormDefault="unqualified",表明在XML文档中使用局部属性时无需添加限定短名作为前缀。

《语义网基础教程》学习笔记(一),布布扣,bubuko.com

时间: 2024-10-16 22:07:52

《语义网基础教程》学习笔记(一)的相关文章

原型模式和Effective C++学习笔记

原型模式(Prototype):用原型实例制定创建对象的种类,并且听过拷贝这些原型创建新的对象. 浅复制:如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象:因此,原始对象及其副本引用同一对象. 深复制:把引用变量的对象指向复制过的新对象,而不是原有的被引用的对象. Effective C++: 1:在资源管理类中提供对原始资源的访问. (1),APIs 往往要求访问原始资源(raw resources),所以每一个 RAII class 应该提供一个"

模板方法模式和Effective C++学习笔记

模板方法模式: 定义:定义一个操作中的算法的骨架,而将一些步骤延伸到子类中.模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤. (1),用了继承,并且肯定这个继承有意义的情况下,就应该要成为子类的模板,所以重复的代码都应该提升到父类中,而不是让每个子类去重复. (2),当我们要完成某一个细节层次一致的过程或者一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑模板方法模式来处理. (3),模板方法模式通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优

Effective C++学习笔记(Part Seven:Item 41-48)

 最近终于把effectvie C++仔细的阅读了一边,很惊叹C++的威力与魅力.最近会把最近的读书心得与读书笔记记于此,必备查找使用,如果总结有什么不当之处,欢迎批评指正: 现在只列出框架,最近会尽快填充完整: 第7部分:模板与泛型编程 所谓泛型编程就是以独立于任何特定类型的方式编写代码.使用泛型程序时,我们需要提供具体程序实例所操作的类型或值.模板是泛型编程思想的一种实现,也是C++研发者思想精髓所在. 条款41:了解隐式接口和编译器多态 条款42:了解typename的双重含义 条款4

Effective C++学习笔记(Part Six:Item 32-40)

 最近终于把effectvie C++仔细的阅读了一边,很惊叹C++的威力与魅力.最近会把最近的读书心得与读书笔记记于此,必备查找使用,如果总结有什么不当之处,欢迎批评指正: 现在只列出框架,最近会尽快填充完整: 第6部分:继承与面向对象设计 面向对象语言有三大特性:继承,封装和多态.遥想当年,每次校招笔试的时候都会有的,但能够甚至这六个字内涵的人,不再多数.本部分概括的说,深入的讲解三大特性之一----继承性.本部分花的时间不少,也感觉挺有意思的.特别是针对某个条款编写个具体程序实现后,明

Effective Java 学习笔记之第七条——避免使用终结(finalizer)方法

避免使用终结方法(finalizer) 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的. 不要把finalizer当成C++中析构函数的对应物.java中,当对象不可达时(即没有引用指向这个对象时),会由垃圾回收器来回收与该对象相关联的内存资源:而其他的内存资源,则一般由try-finally代码块来完成类似的工作. 一.finalizer的缺点: 1. 终结方法的缺点在于不能保证会被及时地执行. 及时执行finalizer方法是JVM垃圾回收方法的一个主要功

Effective C++学习笔记(Part Two:Item 5-12)

?? 近期最终把effectvie C++细致的阅读了一边,非常惊叹C++的威力与魅力.近期会把近期的读书心得与读书笔记记于此.必备查找使用,假设总结有什么不当之处,欢迎批评指正: 如今仅仅列出框架.近期会尽快填充完整: 第2部分:构造/析构/赋值运算 个人觉得这是C++的比較难理解的地方,也是C++的深邃所在,刚開始阅读时,可能在某些地方不理解,最好的方式是边读边编程实现,用心去思考其精髓所在! 条款5:了解C++默默编写并调用那些函数 条款6:若不想使用编译器自己主动生成的函数,就该明白拒绝

Effective C++学习笔记之对RAII思想的思考

 在阅读  Effective C++时,对RAII开始不理解,现总结如下: RAII是Resource acquisition is initialization的缩写形式,即"资源获取就是初始化",是C++等编程语言常用的管理资源.避免内存泄露的方法.它保证在任何情况下,使用对象时先构造对象,最后析构对象. 根据RAII 对资源的所有权可分为常性类型和变性类型,代表者分别是boost::shared_ptr和std::auto_ptr:从所管资源的初始化位置上可分为外部初始化类

Effective C++学习笔记(Part Three:Item 13-17)

 最近终于把effectvie C++仔细的阅读了一边,很惊叹C++的威力与魅力.最近会把最近的读书心得与读书笔记记于此,必备查找使用,如果总结有什么不当之处,欢迎批评指正: 现在只列出框架,最近会尽快填充完整: 第3部分:资源管理(Resource Management) 个人认为这是C++的比较关键的地方,利用好,可以使项目节约资源,合理利用内存资源,防止内存泄露.对于"资源"这两个字,可能刚接触,比较抽象,但你结合一下实际,也有很具体了! 条款13:以对象管理资源 条款14:

Effective C++学习笔记(Part Four:Item 18-25)

 最近终于把effectvie C++仔细的阅读了一边,很惊叹C++的威力与魅力.最近会把最近的读书心得与读书笔记记于此,必备查找使用,如果总结有什么不 当之处,欢迎批评指正: 现在只列出框架,最近会尽快填充完整: 第4部分:设计与申明(Designs and Declarations) 本部分主要讲述了类的设计原则以及设计规则,以及成员命令.成员函数设计时,应该注意的一些地方:个人感觉这是设计好一个类必不可少的. 条款18:让接口容易本正确使用,不易被误用 条款19:设计class犹如设计

Effective C++学习笔记(Part Five:Item 26-31)

 最近终于把effectvie C++仔细的阅读了一边,很惊叹C++的威力与魅力.最近会把最近的读书心得与读书笔记记于此,必备查找使用,如果总结有什么不 当之处,欢迎批评指正: 现在只列出框架,最近会尽快填充完整: 第5部分:实现(Implementations) 本部分主要讲述了类实现过程中的一些原则,为设计出高效率的实现方式,这是你的必经之路:在这一部分读的比较仔细,因为本人在类型转换这方面吃了不少苦头. 条款26:尽可能延后变量定义式的出现时间 条款27:尽量少做转型动作 条款28:避