类层次结构的机器学习_第1页
类层次结构的机器学习_第2页
类层次结构的机器学习_第3页
类层次结构的机器学习_第4页
类层次结构的机器学习_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

23/29类层次结构的机器学习第一部分对象导向编程与类层次结构 2第二部分类层次结构中的继承机制 4第三部分多态性在类层次结构中的应用 7第四部分抽象基类与接口 10第五部分模板方法模式与代码复用 16第六部分策略模式与算法抽象 19第七部分工厂模式与对象创建 21第八部分观察者模式与事件处理 23

第一部分对象导向编程与类层次结构关键词关键要点【面向对象编程】

1.封装性:将数据和方法隐藏在类中,外部只能通过接口与类交互。

2.继承性:允许创建派生类,它们继承并扩展父类的功能。

3.多态性:类的方法在派生类中可以有不同的实现,从而实现对不同对象类型的统一操作。

【类层次结构】

对象导向编程与类层次结构

面向对象编程

面向对象编程(OOP)是一种编程范式,其中程序被组织成对象,这些对象包含数据(属性)和操作这些数据的函数(方法)。OOP的核心原则是封装、继承和多态性。

*封装:将数据和方法打包到一个封装的单元(对象)中,隐藏其内部实现细节。

*继承:从一个类(基类)派生出新类(派生类),派生类继承基类的属性和方法。

*多态性:允许同一消息对不同的对象执行不同的操作,具体取决于对象的类。

类层次结构

类层次结构是一种组织类的方式,其中类根据它们之间的继承关系进行排列。类层次结构的根节点是所有其他类的基类,而叶节点是不继承任何其他类的最派生类。

类层次结构的优点

*代码重用:继承允许派生类重用基类的代码,从而减少重复代码和提高维护效率。

*扩展性:新功能和行为可以通过创建派生类轻松添加到现有类层次结构中。

*多态性:多态性允许在运行时动态响应对象的类型,从而提高代码的灵活性和可维护性。

*松耦合:封装和继承促进松散耦合,使对象之间的依赖性最小化,提高代码的可重用性和可维护性。

创建类层次结构

创建有效的类层次结构需要考虑以下因素:

*确定基类和派生类:识别共同的属性和行为,并基于这些特征确定基类和派生类。

*使用继承:使用继承从基类派生新的派生类,从而继承基类的属性和方法。

*实现多态性:通过实现适当的方法覆盖来实现多态性,允许派生类对接收到的消息做出不同的响应。

类层次结构在机器学习中的应用

类层次结构在机器学习中广泛应用,例如:

*特征提取:不同的特征提取算法可以组织成一个类层次结构,其中根基类代表所有特征,而派生类表示特定类型的特征(例如,数值特征、文本特征或图像特征)。

*模型选择:不同的机器学习模型可以组织成一个类层次结构,其中根基类表示所有模型,而派生类表示特定类型的模型(例如,监督学习模型、无监督学习模型或强化学习模型)。

*超参数优化:超参数优化算法可以组织成一个类层次结构,其中根基类表示所有算法,而派生类表示特定的算法类型(例如,基于梯度的算法、基于采样的算法或基于贝叶斯的算法)。

结论

对象导向编程和类层次结构是机器学习中强大的工具,可以促进代码重用、扩展性、多态性和松耦合。通过仔细设计类层次结构并利用其优势,机器学习从业者可以创建高效、可维护和可扩展的机器学习解决方案。第二部分类层次结构中的继承机制关键词关键要点【类层次结构继承机制】

1.继承的本质:子类从父类继承属性和方法,可以重用父类的功能,减少冗余代码。

2.继承类型:单继承(子类只有一个父类)和多继承(子类可以有多个父类)。

3.继承修饰符:public、protected、private等修饰符控制子类对父类成员的访问权限。

【多态性与动态绑定】

类层次结构中的继承机制

在面向对象编程中,类层次结构(或继承树)是一种组织类和对象的方式,允许派生类(子类)从基类(父类)继承属性和方法。继承机制使得子类能够重用基类的实现,并根据需要扩展或修改基类的行为。

在类层次结构中,子类与基类具有以下两种关系:

*is-a关系:子类是基类的一种特殊化或具体化形式。例如,`Car`类是`Vehicle`类的一种特殊化形式。

*has-a关系:子类包含基类的一个或多个实例。例如,`Car`类可能包含一个`Engine`类实例。

继承类型

单继承:一个子类只能从一个基类继承。这是最常见的继承类型。

多继承:一个子类可以从多个基类继承。这在某些情况下很有用,但可能会导致代码中的复杂性和二义性。

多层次继承:一个子类从其他子类继承,而其他子类又从一个共同的祖先基类继承。这可以用于创建复杂的类层次结构。

多重继承:一个子类从多个祖先基类继承,而这些祖先基类没有共同的祖先。这可能会导致二义性和代码中的冲突。

继承机制

当子类从基类继承时,它会获得以下能力:

*继承属性:子类继承基类的所有属性,除非这些属性被子类显式覆盖。

*继承方法:子类继承基类的所有方法,除非这些方法被子类显式覆盖。

*重写(Override):子类可以重新定义(覆盖)基类中的任何方法,以提供不同的实现。

*扩展(Extend):子类可以添加新的方法和属性,从而扩展基类的功能。

*多态性:子类对象可以被当作基类对象使用,这允许在运行时对对象进行操作,而无需了解其确切类型。

访问修饰符

继承机制与访问修饰符(例如`public`、`protected`和`private`)密切相关。访问修饰符决定了子类可以访问基类的哪些属性和方法:

*public成员在任何地方都可以访问,包括子类和外部代码。

*protected成员只能在同一包(package)中的类或子类中访问。

*private成员只能在本类中访问。

例如,如果一个基类的属性被声明为`private`,那么子类将无法直接访问该属性。然而,如果子类提供了一个公共方法来访问该属性,则子类可以通过该方法访问基类的`private`属性。

继承的优点

*代码重用:继承允许子类重用基类的实现,从而减少重复代码和维护成本。

*可扩展性:继承使得扩展现有代码变得更容易,因为子类可以根据需要添加新的功能。

*多态性:继承支持多态性,这使得在运行时对对象进行操作变得更加灵活和高效。

继承的缺点

*代码复杂性:复杂的类层次结构可能会导致代码复杂性增加,尤其是当涉及多重继承时。

*二义性:当父类和子类的方法名称相同时,可能会出现方法调用的二义性。

*脆弱性:父类的更改可能会影响子类的行为,从而导致意想不到的后果。

结论

类层次结构和继承机制是面向对象编程中强大的工具,允许开发人员创建复杂和可扩展的代码。了解继承的类型、访问修饰符以及优点和缺点对于有效利用继承至关重要。通过精心设计和谨慎使用,继承可以极大地提高代码质量和可维护性。第三部分多态性在类层次结构中的应用多态性在类层次结构中的应用

简介

多态性是面向对象编程(OOP)中的一项基本原则,它允许对象以不同的方式响应相同的消息调用。在类层次结构中,多态性通过继承和多态方法实现,从而提高了代码的可重用性、可扩展性和灵活性。

多态方法

多态方法是重载的方法,这意味着在派生类中可以声明具有相同名称但不同实现的方法。当调用派生类对象上的多态方法时,将执行与该类关联的特定实现。

例如,考虑一个形状层次结构,其中`Shape`类是基类,而`Circle`和`Square`类是其派生类。所有形状都共享一个`getArea()`方法,该方法计算并返回形状的面积。

```java

publicabstractdoublegetArea();

}

@Override

//计算圆形的面积

}

}

@Override

//计算正方形的面积

}

}

```

当调用派生类对象上的`getArea()`方法时,将执行与该特定形状相关的实现。这允许我们在处理不同类型形状时使用统一的界面,而无需显式地检查形状的类型。

继承

继承是多态性的另一个关键方面。继承允许派生类访问和重用基类的方法和属性。通过继承,派生类可以继承基类的多态方法并提供自己的特定实现。

例如,在形状层次结构中,`Circle`和`Square`类继承自`Shape`类。这意味着它们可以访问`Shape`类的`getArea()`方法,并通过提供自己的实现来重载它。

```java

@Override

//Circle的面积计算

}

}

@Override

//Square的面积计算

}

}

```

继承和多态方法相结合,允许类层次结构中的对象以一致的方式响应相同的调用,同时仍然提供特定于它们的实现。

优势

多态性在类层次结构中提供了以下优势:

*代码重用:通过允许派生类重用基类的方法,多态性减少了代码重复,从而提高了可维护性。

*可扩展性:类层次结构可以通过添加新的派生类和重载现有方法来轻松扩展,从而增强了应用程序的可扩展性。

*灵活性:多态性允许在运行时根据特定情况选择不同的实现,从而提高了代码的灵活性。

*解耦:多态性有助于解耦应用程序的各个组件,因为客户端代码无需了解所调用的实际类,从而提高了可测试性和可维护性。

示例

多态性在现实世界中有很多应用。以下是一些示例:

*图形用户界面(GUI):GUI组件(例如按钮和文本框)使用多态性来实现统一的界面,即使它们具有不同的行为。

*数据库连接:JDBC等数据库连接框架使用多态性来支持连接到不同类型的数据库,例如MySQL和PostgreSQL。

*文件系统操作:Java的文件系统API使用多态性来提供一致的方法集,用于与不同类型的文件系统交互。

结论

多态性是类层次结构中的一个强大工具,它通过允许对象以不同的方式响应相同的消息调用来提高了代码的可重用性、可扩展性和灵活性。通过继承和多态方法的结合,类层次结构能够提供一致的接口,同时针对每种特定的对象类型提供定制化的行为。第四部分抽象基类与接口抽象基类与接口

在面向对象编程中,抽象基类和接口是实现代码重用和代码扩展性的重要机制。在机器学习中,它们被广泛用于定义可由不同机器学习模型共享的通用方法和数据结构。

抽象基类

抽象基类是一种具有至少一个纯虚方法的类。纯虚方法没有实现,必须由派生类实现。抽象基类允许您定义一组共同的接口,而无需指定具体实现。

例如,您可以定义一个名为`IModel`的抽象基类,其中包含以下纯虚方法:

```python

classIModel(ABC):

@abstractmethod

deftrain(self,X,y):

"""训练模型。

参数:

X:特征矩阵。

y:标签向量。

"""

@abstractmethod

defpredict(self,X):

"""预测新数据。

参数:

X:特征矩阵。

返回:

预测标签。

"""

```

此抽象基类定义了一组所有机器学习模型都必须实现的通用方法。通过继承此抽象基类,您可以创建特定的机器学习模型,同时从抽象基类继承通用接口。

接口

接口类似于抽象基类,但没有实现任何方法。它们只定义一组方法签名,必须由实现接口的类实现。接口是纯抽象的,不能实例化。

以下是如何用Python定义一个`IModel`接口:

```python

fromabcimportABC,abstractmethod

classIModel(ABC):

@abstractmethod

deffit(self,X,y):

"""训练模型。

参数:

X:特征矩阵。

y:标签向量。

"""

@abstractmethod

defpredict(self,X):

"""预测新数据。

参数:

X:特征矩阵。

返回:

预测标签。

"""

```

接口与抽象基类的主要区别在于,接口不能具有实现或数据成员。它们只能定义方法签名。

抽象基类与接口的比较

抽象基类和接口都是定义通用接口的机制,但在实现方式上有细微差别:

*实现方式:抽象基类允许实现方法,而接口则完全是抽象的。

*继承性:类只能继承一个抽象基类,但可以实现多个接口。

*多态性:抽象基类和接口都支持多态性,允许您创建不同类型的对象,这些对象共享一个共同的接口。

在机器学习中的应用

抽象基类和接口在机器学习中广泛用于:

*定义模型接口:定义所有机器学习模型都必须遵守的通用方法和数据结构。

*促进代码重用:允许在不同的机器学习模型中重用常见的代码段。

*实现多态性:允许您创建不同类型的模型,这些模型可以与其他代码模块进行交互,而无需了解其具体实现。

*增强代码可扩展性:允许您轻松地添加新模型,而无需修改现有代码。

示例

以下是一个使用抽象基类定义机器学习模型接口的示例:

```python

fromabcimportABC,abstractmethod

classIModel(ABC):

@abstractmethod

deffit(self,X,y):

"""训练模型。

参数:

X:特征矩阵。

y:标签向量。

"""

@abstractmethod

defpredict(self,X):

"""预测新数据。

参数:

X:特征矩阵。

返回:

预测标签。

"""

@abstractmethod

defget_params(self):

"""获取模型参数。

返回:

模型参数的字典。

"""

@abstractmethod

defset_params(self,params):

"""设置模型参数。

参数:

params:要设置的参数。

"""

classLinearRegressionModel(IModel):

def__init__(self):

self.coef_=None

ercept_=None

deffit(self,X,y):

#训练线性回归模型

defpredict(self,X):

#预测新数据

defget_params(self):

#获取模型参数

defset_params(self,params):

#设置模型参数

```

此示例定义了一个`IModel`抽象基类,它包含机器学习模型必须实现的共同接口。通过继承`IModel`,您可以创建特定的机器学习模型,例如`LinearRegressionModel`。第五部分模板方法模式与代码复用模板方法模式与代码复用

在面向对象编程中,模板方法模式是一种设计模式,它定义了一个算法的骨架,允许子类在不改变算法结构的情况下重新定义特定步骤。该模式通过促进代码复用性和可扩展性,在机器学习中得到广泛应用。

模板方法模式的结构

模板方法模式由以下类组成:

*抽象类(基类):定义算法的骨架,包含算法的公共步骤。

*具体类(派生类):继承抽象类,重新定义需要定制的步骤。

模板方法模式的优点

*代码复用:算法的公共部分只定义一次,无需在子类中重复。

*可扩展性:易于添加新功能或修改现有功能,通过创建新的具体类即可。

*可维护性:算法的骨架与具体步骤分离,易于维护和更新。

模板方法模式在机器学习中的应用

在机器学习中,模板方法模式常用于:

*模型训练:定义模型训练算法的骨架,具体类实现特定的模型训练算法。

*数据预处理:定义数据预处理算法的骨架,具体类实现特定的数据预处理任务。

*超参数优化:定义超参数优化算法的骨架,具体类实现特定的超参数优化算法。

代码示例

以下是一个模板方法模式在机器学习中的代码示例,用于定义一个通用的模型训练算法:

```python

fromabcimportABC,abstractmethod

classAbstractModelTrainer(ABC):

deftrain(self,data,labels):

self.preprocess_data(data,labels)

model=self.create_model()

model=self.fit_model(model,data,labels)

returnmodel

@abstractmethod

defpreprocess_data(self,data,labels):

pass

@abstractmethod

defcreate_model(self):

pass

@abstractmethod

deffit_model(self,model,data,labels):

pass

classConcreteModelTrainer(AbstractModelTrainer):

defpreprocess_data(self,data,labels):

#Performspecificdatapreprocessingtasks

defcreate_model(self):

#Createaspecificmodelinstance

deffit_model(self,model,data,labels):

#Fitthemodelusingaspecificalgorithm

```

结论

模板方法模式在机器学习中是一项有价值的设计模式,它通过代码复用、可扩展性和可维护性,简化了复杂算法的实现。通过将算法的骨架与具体步骤分离,它使开发人员能够轻松适应不同的模型和任务,从而提高了机器学习应用程序的效率和灵活性。第六部分策略模式与算法抽象策略模式与算法抽象:类层次结构中的机器学习

策略模式

策略模式是一种设计模式,它封装了算法家族,并使得算法可以独立于使用它们的客户端而改变。在机器学习中,它允许将不同的学习算法作为一个可互换的策略来使用。

在策略模式下,学习算法被封装在独立的策略类中。每个策略类实现了特定算法的方法。客户端(例如机器学习模型)通过一个接口与策略交互,该接口定义了算法的公共方法。

使用策略模式的好处包括:

*算法的灵活性:算法可以动态地更改,而无需修改客户端代码。

*代码的重用性:不同的策略可以共享相同的接口,简化了代码的重用。

*可测试性:策略类的单元测试可以独立于客户端进行。

算法抽象

算法抽象是将算法的关键特性提取到抽象基类或接口中的过程。在机器学习中,算法抽象有助于建立算法之间的通用界面,从而促进代码的组织和重用。

算法抽象基类或接口通常定义了以下方法:

*训练(train):训练算法并更新其模型参数。

*预测(predict):使用训练好的模型对新数据进行预测。

*评估(evaluate):评估算法在特定数据集上的性能。

抽象算法类的好处包括:

*代码的可读性和可维护性:通过将算法的通用特性与具体实现分离,代码变得更加易于理解和维护。

*算法的可扩展性:抽象层允许轻松地添加和移除新的算法。

*算法的比较:算法抽象提供了在统一界面下比较不同算法性能的基础。

在类层次结构中的结合

策略模式和算法抽象可以结合使用,创建灵活且可扩展的机器学习类层次结构。通过将策略模式应用于抽象算法基类,可以轻松地将不同的算法作为可互换的策略实现。

例如,考虑一个机器学习模型,它需要使用不同的学习算法进行训练。我们可以创建一个抽象算法基类`AbstractAlgorithm`,定义了`train`、`predict`和`evaluate`方法的公共接口。然后,我们可以创建具体策略类,例如`LinearRegressionStrategy`、`LogisticRegressionStrategy`和`DecisionTreeStrategy`,每个策略类实现`AbstractAlgorithm`接口并提供特定算法的实现。

将策略模式与算法抽象相结合,机器学习模型可以动态地切换算法,而无需重写客户端代码。这使得模型更加灵活和可扩展,使其能够适应不同的机器学习任务和数据类型。

总结

策略模式和算法抽象是用于组织和抽象机器学习算法的强大设计模式。策略模式封装了算法家族,允许算法独立于客户端进行更改。算法抽象将算法的关键特性提取到通用界面中,促进代码的重用和可扩展性。通过将这两种模式结合到一个类层次结构中,可以创建灵活、可维护和可扩展的机器学习应用程序。第七部分工厂模式与对象创建关键词关键要点【工厂模式与对象创建】

1.工厂模式是一种设计模式,它将对象创建和对象接口分离,提供了创建对象的一致性。

2.工厂模式使得客户端代码不再依赖于具体产品的创建,降低了耦合度。

3.工厂模式允许在运行时动态创建对象,提高了代码的灵活性。

【面向对象设计原则】

工厂模式与对象创建

工厂模式是一种面向对象的创建模式,它提供了创建对象的接口,而不指定创建的实际类。这种模式允许在不指定具体类的情况下创建对象,从而提高了系统的灵活性。

在类层次结构中,工厂模式通常用于创建复杂或多层次的对象。通过将对象的创建封装在工厂类中,可以方便地更改创建的具体类,而无需修改客户端代码。

工厂模式的优点

*松耦合:工厂模式将对象创建与客户端代码解耦,使客户端代码独立于具体类。

*可扩展性:新类可以轻松添加到系统中,而无需修改客户端代码。

*灵活性:可以根据不同的需要动态地创建不同的对象。

工厂模式的实现

工厂模式通常通过一个工厂类及其对应的具体产品类来实现。工厂类负责创建对象,而具体产品类负责实现对象的行为。

具体实现方式

简单工厂模式:

简单工厂模式是最简单的工厂模式,它根据客户端请求创建一个特定的产品对象。缺点是它不能很好地扩展,因为每次添加一个新产品都需要修改工厂类。

工厂方法模式:

工厂方法模式允许子类决定创建哪个类。工厂类定义了一个创建操作,而具体子类重写该操作以创建自己的对象类型。这种模式提供了更大的灵活性,因为新产品可以很容易地添加到系统中。

抽象工厂模式:

抽象工厂模式创建一系列相关的对象,这些对象通常属于同一个产品族。它提供了一个工厂类来创建每个产品族的对象。这种模式提供了更高级别的抽象,因为它允许创建整个产品族,而不是单个对象。

虚拟构造函数模式:

虚拟构造函数模式是一种独特的工厂模式,它使用虚拟构造函数在运行时创建对象。这种模式通常用于创建依赖于外部因素的对象,例如配置文件或数据库连接。

工厂模式的应用场景

工厂模式广泛应用于各种场景中,包括:

*创建复杂对象:当创建一个对象需要多个步骤或依赖于外部因素时,工厂模式可以简化创建过程。

*创建产品族:当系统需要创建一系列相关的对象时,抽象工厂模式可以提供方便的方法。

*对象多态性:当需要在运行时创建不同类型的对象时,虚拟构造函数模式可以提供灵活性。

结论

工厂模式是类层次结构中一种重要的创建模式。它提供了在不指定具体类的情况下创建对象的机制,从而提高了系统的灵活性、可扩展性、松耦合度和可维护性。通过理解和应用工厂模式,开发人员可以创建健壮、可重用和易于维护的代码。第八部分观察者模式与事件处理关键词关键要点【观察者模式】

-观察者模式是一种设计模式,允许对象订阅和取消订阅其他对象的事件通知。

-当被观察的对象发生状态变化时,它会通知所有订阅的观察者,从而触发观察者的相应操作。

-观察者模式提高了程序的松散耦合性,使对象能够独立于其依赖项进行修改。

【事件处理】

观察者模式与事件处理

引言

观察者模式是一种设计模式,它允许对象(称为观察者)订阅主题(称为可观察对象)的事件。当可观察对象的内部状态发生变化时,它将通知所有观察者。这种模式通常用于实现事件响应系统,例如用户界面的更新或对外部刺激的自动化响应。

类层次结构中的观察者模式

使用类层次结构实现观察者模式涉及创建以下类:

*主题抽象类:定义一个接口,用于注册和删除观察者以及触发事件通知。

*具体主题:从主题抽象类派生并实现特定于域的事件。

*观察者抽象类:定义一个接口,用于接收来自主题的更新。

*具体观察者:从观察者抽象类派生并实现特定的事件处理逻辑。

实现

1.注册观察者:

当观察者希望接收来自主题的事件时,它将调用主题的`registerObserver()`方法。主题将观察者存储在内部列表中。

2.取消注册观察者:

当观察者不再希望接收事件时,它将调用主题的`unregisterObserver()`方法。主题将从内部列表中删除观察者。

3.触发事件通知:

当主题的内部状态发生变化时,它将调用其`notifyObservers()`方法。此方法将遍历内部列表中的每个观察者并调用其`update()`方法。

4.更新观察者:

观察者的`update()`方法接收主题作为参数,可以访问主题的最新状态。观察者将根据事件的类型执行适当的处理逻辑。

事件处理

事件处理是观察者模式的一个特例,它允许对象(即事件处理程序)订阅特定事件的发生。事件处理程序可以执行特定于事件的响应,例如更新用户界面或发送电子邮件通知。

在类层次结构上下文中,事件处理可以通过以下方式实现:

*事件派发程序抽象类:定义一个接口,用于注册和删除事件处理程序以及触发事件。

*具体事件派发程序:从事件派发程序抽象类派生并处理特定类型的事件。

*事件处理程序抽象类:定义一个接口,用于处理事件。

*具体事件处理程序:从事件处理程序抽象类派生并实现特定的事件处理逻辑。

事件派发程序与主题类似,它维护事件处理程序的内部列表并负责触发事件。事件处理程序与观察者类似,它们接收事件并执行相应的操作。

优点

观察者模式和事件处理为类层次结构提供了以下优点:

*松耦合性:观察者和主题(或事件处理程序和事件派发程序)之间是松耦合的。它们不需要了解彼此的内部实现,从而提高了可扩展性和可维护性。

*扩展性:可以轻松添加或删除观察者(或事件处理程序)而不会影响系统其他部分。

*可重用性:观察者和事件处理程序可以重用于不同的主题或事件派发程序,从而提高代码效率。

*可测试性:由于观察者和事件处理程序的松耦合性,它们很容易单独测试,从而提高了系统的整体可靠性。

应用场景

观察者模式和事件处理在各种场景中都有应用,例如:

*用户界面更新:当模型发生变化时,视图可以作为观察者接收更新并相应地更新用户界面。

*事件日志记录:日志记录器可以作为观察者接收来自系统的事件通知并将其记录到文件中。

*自动化响应:事件处理程序可以自动响应外部事件,例如发送电子邮件通知或触发其他操作。

*状态监视:观察者可以监视对象的内部状态并在状态发生变化时采取措施

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论