我认为我对C语法编程相当在行。我现在正在寻找的是一些资源,书籍,网站,博客,它们处理设计面向对象的桌面应用程序和Web应用程序的最佳方法,特别是在涉及数据和数据库时
谢谢你给我推荐一本关于如何开发软件的书。对于设计,您可能想看看。是一个从A到Z的软件开发参考。你也可以考虑O'ReLyLooBoots,尤其是作为一个更容易开始的东西。
编辑我不知道我是怎么忘记鲍勃·马丁的,但你也可以阅读Object Mentor在其任何列表上的任何书籍。这是他们的一节。我特别推荐亚马逊,但它也是对象导师列表上的第
我读了这本书:
现在我期待着找到一个软件,使它可以很容易地收集我的所有想法等(面向对象分析的特定软件)
目前,我正在使用我的白板收集/设计想法等。之后,我拍摄了它的照片并将文本添加到我们的Wiki/Trac。在学校,我们使用ObjectEngining,它易于使用,集成到Eclipse中,但不是免费的
IMO空白纸是必须的,但并不总是更易于共享和编辑。在学校,我们使用的是ObjectEngining,它易于使用,集成到Eclipse中,但不是免费的
在我看来,空白纸是必须的,但并不总是更容易分
通过这种方式,我可以确保只有Factory可以创建其所属类的实例
这是正确的方法还是有其他替代/好的方法?常见的方法(在C++中)是将“所属类”构造函数私有化,并让它们将工厂类声明为朋友我将使类A和B成为XFactory的朋友,并将它们的所有构造函数私有化。因此,只有XFactory可以访问其构造函数
这是C++中的。在Java或C#中,我看不到任何在编译时强制实现这一点的干净方法。您的示例远不是傻瓜式的,甚至有点令人困惑,因为只要有一个XFactory实例,他就可以将其传递给a或B的构造函数,
我刚刚遇到一些代码,其中有一个隐式setter,但没有getter,例如:
public class Person {
//no getter!
public function set food(value:Food):void {
// do something with food.
this.processFood(value);
this.dispatchEvent(new Event(FoodEvent.EATEN));
我知道这个问题已经被问过了,但是我没有完全正确,我想知道,到底是基础类还是类型。我有几个问题,请帮我澄清一下
类型是编程数据类型的基础吗
类型硬编码到语言本身中。阶级是我们可以定义自己的东西
什么是非类型化语言,请举例说明
类型不是属于oop概念的东西,我的意思是它不限于oop世界
请帮我澄清一下,谢谢。这可能取决于语言。在OO中,我将类型和类视为同一事物,只是区分了类(对象族的定义)和实例(或对象)以及类的特定具体实例
我来自一个C世界,在那里,像int这样的语言定义类型与您自己用typede
可能重复:
嗨,我正在向非程序员教授OOP概念。我想知道如何解释接口和抽象类之间的区别。
我实际上在寻找的是一个真实世界的例子,它可以帮助突出两者之间的区别。这里有一个很好的比较:。我从下面复制了一个具体的例子:
接口
接口通常用于描述类的外围功能,而不是其中心标识,例如,汽车类可能实现可回收接口,该接口可应用于许多其他完全无关的对象
抽象类
抽象类定义其子类的核心标识。如果你定义了一个狗的抽象类,那么达尔马提亚的后代就是狗,他们不仅仅是狗。实现的接口列举了类可以做的一般事情,而不是类本身
播
我能做些什么来构造我的应用程序,使代码在变大时保持可管理性?我正在构建一个处于特定状态的应用程序,该状态将根据用户与应用程序的交互方式而变化,并且应用程序可能处于许多不同的状态。我试着寻找教程/资源,但我发现的只是一个有两种模式的应用程序,而我的应用程序会有很多不同的行为
例如,您可以单击对象类型A或B,因此每个对象都有不同的行为。如果按住鼠标并尝试拖动一个,它们的行为也会有所不同。但如果你没有按住鼠标,那就意味着它不是拖拽。当你处于Y状态时,知道当X事件发生时应该进入什么模式让我感到困惑,因为
标签: Oop
n-tier-architecture
在这里,oop不是那么新手,但仍在从结构化编程过渡。我试图将自包含对象的概念与n层编程相协调。在我看来,你可以有一个或另一个,但不能两者兼而有之
请告诉我n层体系结构的错误在哪里。说我想和一群人一起工作。我用FN、LN、BDay等在实体层中创建了一个“Person”类。我将使用这个Person类在我的所有层(UI、Business和DataAccess)中表示一个人。但我通常无法将任何有用的方法放入“Person”中,因为这样我将跨越层边界
因此,我最终创建了一个UiPersonClass、一个
这只是一个介绍状态机和设计模式基础知识的教程。从这里开始,有一个很好的教程。有一些提示和提示:。试试。+1只是因为我偏爱FSM而成为明星
我一直在问自己的一个问题是,在面向对象编程中,设置和属性等数据应该如何以面向对象的方式传递
例如,大多数程序都有选项,比如说您有设置撤消级别的选项。必须获取该值,然后将其设置为新值。如果这些设置保存在xml文件中,那么应用程序的选项对话框部分仍然需要某种xml解析器来加载数据。在另一个场景中,您将拥有一个表示获取和设置设置的对象,需要该对象的每个区域都将具有对所有设置的全局访问权限,并且需要传递指向该对象的指针
在像Maya或3DS Max这样的场景中,它们使用巨大的gui系统来设置对象属性,如
我读过关于S.O.L.I.D.的文章。但我看不出OCP和DIP有什么区别。请看以下OCP示例:
http://www.oodesign.com/open-close-principle.html
保存OCP的代码也满足DIP。有谁能给我举一个包含OCP而不是DIP的代码的例子吗?我发现依赖注入和打开/关闭的解释也令人困惑。不一定要这样。让我们看一看你引用的文章:
在他们的示例中,有一个GraphicsEditor类和一个shape类的层次结构。在他们展示的第一个类图中,GraphicsEdit
假设您有一个歌曲的域模型类。歌曲的节奏属性(int)应始终为正数。这个需求应该是域模型的一部分还是外部的(比如在SongManager/业务逻辑层类中)
假设您选择这样实施它:
class Song {
private int tempo;
// ...
public void setTempo(int tempo) {
if (tempo > 0) {
this.tempo = tempo;
} else {
// what?
下面代码中的对象只实例化了一次,对吗?因此,已实例化的单个对象应包含一个值为2的整数i字段。为什么p.i给出的是1而不是2?这是针对SystemVerilog的吗?还是所有oop语言的行为都类似
class Packet;
integer i = 1;
function integer get();
get = i;
endfunction
endclass
class LinkedPacket extends Packet;
integer i = 2;
fu
是的,另一个关于web应用程序MVC体系结构中职责分离的问题-我认为这个问题有一个微妙的区别
我的现有实现如下所示:
控制器:非常“薄”;除了对模型和视图的调用外,仅路由和表示逻辑
型号:非常“厚”;所有业务逻辑
观点:非常“瘦”;除了内容和标记,代码仅限于循环和数据格式
此外,该项目将ORM用作数据库上方的抽象层,并将“连接器”用作外部服务的包装类
我的问题涉及模型之间的责任分离。在很大程度上,我们的模型模拟了系统中的“事物”——“用户”、“产品”、“订单”等
我发现这对于服务简单的数据检
我有一个X类和Y类,它们基本上是X的集合。我想写一个方法,将一个X添加到一个特定的集合Y中。这个方法会改变X上的一些状态,当然也会改变Y上的一些状态。我的问题是,在X类中使用这个方法的最佳位置是(所以这个方法将是X.addToY(Y)),还是应该在Y类中使用(Y.addX(X))?我应该考虑什么呢?考虑一下,如果你把方法放在X中,当Y包含X的集合时,它自己添加到Y中,那么X必须知道Y,Y必须知道X;如果你把方法放在Y中,那么Y需要知道X,但是X不需要知道Y。你可以避免循环依赖。除了这种方法与Y类
我有一个样本(不完整)类,如
class ABC{
public:
void login();
void query_users();
//other methods
private:
//member data
}
这个类的使用方式应该是先调用login,然后才能调用query\u用户等其他方法。Login为其他方法设置一些私有成员数据。除了调用一个函数来检查成员数据是否设置在类中其他每个方法的开头之
标签: Oop
entitysingle-responsibility-principle
关于单一责任原则,以及关于过大类的普遍警告,所有这些如何应用于实体类?从本质上讲,实体不应该封装一个实体的所有内容吗?这不是他们的“单一责任”吗
否则,假设您的实体类变得“太大”,正如一些人可能会说的那样,您如何在不破坏该实体应该提供的自然封装的情况下实际分解它?如果你有一个Person类,只有名字、年龄和喜欢的食物,那么很明显,它们都应该是Person的属性。但如果你需要再添加20个类似的属性,比如眼睛颜色、右手、宗教选择等等,该怎么办?就因为他们很多,这是否突然意味着他们需要被分成不同的班级
标签: Oop
Uml
class-diagramobject-oriented-analysis
请注意:我知道聚合是一种特定类型的关联。但是,这是否是聚合
class A{
void myfunc(){
B myB = new B();
}
}
class B{
// some code for class B, which as nothing to do with class A
}
因此,当B的对象在类a的函数范围内创建和销毁时,这两个类之间的关系是什么?由于在方法中只有局部变量的引用,因此在示例中,a和B之间没有关联(因此,没有聚合)
我有使用strategy模式的类(每个类都有相同的单一方法,但实现方式非常不同)。我有另一个类,它根据运行时可访问的值选择要使用的实现。我有最后一个类,它基本上把其他类放在一起,调用实现类的必要方法并格式化输出
我可以给这个控制器类起什么名字,使它至少半清楚它的用途?在有人问之前,它已经是一个非常小的类(
假设我有一个银行应用程序,它有一个名为Account的基类和许多子类,例如Savings、Current。我设计了我的应用程序,这样如果我有一个新帐户,比如支票,我就可以通过不干扰其他类轻松添加它。这似乎遵循了开闭原则
但是,如果我的客户决定需要更改储蓄账户的详细信息,会发生什么情况?我不是在扩大储蓄,我想改变它的“calculateInterest”方法。我必须修改储蓄的事实是否意味着我违反了开闭原则?这可能更适合程序员堆栈交换。//当我们在这里的时候,你用什么方式改变计算利息的方法?你是在增
我在无状态EJB中有一些业务逻辑,但是对于一个EJB来说,这些逻辑太复杂、太大。因此,我可以在这里看到要做的以下事情:
1) 将逻辑提取到一些helper类中,并在EJB中实例化它们,这样EJB就像所有业务逻辑的门面。
缺点是:EJB有很多注入的资源(例如队列、connectionFactory和其他EJB),所以我必须在构造函数中将这些资源传递给助手类。也许没那么方便,但可行
2) 。使用业务逻辑和注入创建更多本地无状态EJB。
缺点是:我不确定大量本地EJB是否会影响整个应用程序的性能。可能
可能会因此被击落,但我的参数有问题
说我需要存储一个我做的比赛
在计划期间,我意识到我需要存储以下内容:
比赛地形
比赛地点
比赛开始的时间
入场时间结束。
比赛名称
允许加入的成员类型
等
简言之,这是一大堆无法更新的数据,而这些数据不可能真正来自elsewere
总的来说,我的JUnitorRace对象有22个参数,我的SeniorRace对象有26个参数,我已经编写了代码,但是很混乱,我不喜欢我的工作
这不会是一个大问题,实际上对用户来说也不会是一个问题,因为他们不会看到业务模型,只是视图
在试图找出游戏的机制时,我遇到了一个理论上的写作障碍。基本上,我想让两个圆不断增长,直到它们碰撞,当它们碰撞时,它们开始收缩,直到它们的半径为0,然后它们再次开始增长,碰撞,等等
我了解物理碰撞是如何工作的,我了解如何使用圆形边界框来检测碰撞。我不明白的是如何创建对象“圆”的两次迭代,并检测同一对象的两次迭代之间的碰撞。如何引用或检测函数中的两个不同圆?我也希望这个可以扩展,这样我就可以有3个,4个或更多的圆圈相互作用
如果这不合理,下面是我正在使用的一些代码:
local function s
我想要两个相互独立的类。内容类型和URL。URL将具有内容类型
我是否可以在内容类型中添加一个摘要字段,该字段可以轻松查询(例如,内容类型X有10个URL),或者我是否需要查询所有URL并以这种方式提取内容类型
URL还可以与其他类(不仅仅是此内容类型)关联,这就是为什么我不创建内容类型的超类,然后创建子URL类的原因。这取决于。基本上,您要问的是:给定1:n关系,如何自动查询两个方向
如果您使用数据库存储数据,大多数对象关系映射程序都会免费为您提供此功能。如果你没有,你需要自己处理
有多种选择
我是面向对象设计模式的新手。我对域模型有一个基本概念。然而,我陷入了以下问题。问题是我有一个包含事件和客户的系统(都是1…*)。此外,事件还包含包。允许用户预订事件。然而,他必须通过预订包含在活动中的套餐来实现这一点。给定情况的正确域模型应该是什么。我对类似的问题做了很多研究,但没有找到合适的答案
我猜:
(一)
在这张图片中,客户可以预订活动,但我对此不确定,因为客户正在预订活动中包含的套餐。我应该为给定系统选择此域模型吗?这是直观的,因为它允许客户预订活动
(二)
在此图像中,域模型表示系统
这个问题是关于OOP原则,而不是个人观点
如果我们有一个与对象B、C和D有关系的对象A,并且所有这些对象都需要在NoSQL(或任何面向对象的数据库)中持久化,那么我应该如何编写我的对象
将ID作为如下关系:
public class A {
String idOfB, idOfC, idOfD;
}
public class A {
B instanceOfB;
C instanceOfC;
D instanceOfD;
}
从数据库中检索后,可以直接创建对象
从我读到的东西中,我了解到CLOS中的访问器函数允许程序员获取和设置变量,它生成一个通用函数,这个函数的名称是交给访问器的,您需要定义不同的方法。但我想知道的是,为什么通用函数的工作方式与访问器不同功能
比如说
(defclass animal ()
((sound
:initarg :sound
:initform "no sound"
:accessor make-sound)))
我可以
定义
但是如果我把访问器拿走并
我看到一个简单的类,它看起来像:
class SomeClass extends Object{
int a;
int b;
...
...
}
为什么将该类扩展为对象类?正如文档中所述,“因为对象是Dart类层次结构的根,所以其他每个Dart类都是对象的子类。”
如果我们不扩展对象,会发生什么?或者,它可能在某些特定问题中有用?所有dart类都隐式扩展对象,即使没有指定
这可以使用以下代码进行验证:
class Foo{}
void main(){
var foo=foo(
标签: Oop
software-designclass-diagramastah
我正在使用Astah创建类图(用于TypeScript应用程序)。我正在尝试添加一个函数键,它返回类型为T的IterableIterator
我的问题是,每次我按enter键时,keys():IterableIterator都会更改为keys():IterableIterator。我是否试图错误地添加它(第一次建模泛型),或者这是Astah(我正在使用的设计工具)中的一个问题/设置
无法复制,请检查现有类型
我正在阅读《实用程序员》20周年纪念版,我在思考这段代码是否违反了单一责任原则:
class Line {
private double length;
private Point start;
private Point end;
public Line(Point start, Point end) {
this.start = start;
this.end = end;
calculateLength();
}
void setSta
我的API有不同的参数。根据这些,我有两个稍微不同的过程。但产量几乎相同。我应该使用构建器模式吗
例如,假设存在不同的查询参数A和B:
// For case A:
if (A){
funX(A);
funY();
funZ();
}
// For case B :
if(B){
funW(B);
funX(B);
funY();
funZ();
}
注意:这里的过程有点复杂。例如,第三方api调用、筛选、排序、复杂计算等。简单的事实是,流程略有不同,这并不证明
几乎描述了问题的前半部分
它说:
在阅读了“四人帮”的定义之后,我不相信有什么
真正的不同。(为方便起见包括在内)
装饰器:允许动态包装对象,以便
修改其现有职责和行为
链
职责:为多个对象提供处理一个问题的机会
通过将接收对象链接在一起进行请求
维基百科对它们进行了一些充实,但有些内容有点武断
装饰器通常实现为一个链表。但我认为
这太低级了,不能被认为是模式的“一部分”
责任链链接仅处理由其负责的数据;
但确定责任和数据处理都是行为的一部分。装饰师也可以轻松做到这一点
Decorat
试图用Lua构建国际象棋,棋子有问题。我有一个基本的“Piece”类,然后是一个为每个工件继承Piece类的类。我在重写基类表时遇到问题。创建一个对象,然后在创建另一个对象时覆盖表中的字段
我的基类:
Piece = {
killed = false,
white = false,
pieceName = nil
}
function Piece:new(white)
local returnObject = {
killed = false,
如果我有一个textgame,它有一个world对象,它有一个room类型的对象,它有物品和敌人的对象,然后是一个gamehelper对象,它有实际玩家的用户对象。(这个游戏没有游荡的敌人,因为这会让我的问题变得复杂:-)
我应该怎样去杀一个敌人或者捡起一个物体?
或者,当我完全构建我的课程时,我应该考虑其他方式吗?我得到的建议是,我需要一个管理者来控制世界,并在用户和对象之间进行调解,但我不知道这看起来/工作起来如何
我还将实现killable和pickable的接口,以便在必要时将对象彼此分
我知道有很多理由让你把一个物体放在另一个物体里。一些学派已经明确说明了以某种方式设计程序的原因,例如“数据驱动设计”或“领域驱动设计”。我仍然是OOP的初学者,我常常很难理解为什么一个对象应该包含在另一个对象中。有时,我发现自己有一个看起来很棒的对象,然后我意识到,“好吧,现在我必须把它放在某个地方?”这背后的原因与我决定将文件放在硬盘上的原因类似吗
对此,我有几个指导原则:
如果它模拟了物理世界中的关系
如果编写器具有构造对象所需的数据
如果合成的对象正在侦听编曲器
当你做这个决定时,你在
标签: Oop
polymorphismdynamic-languages
嗨,我在自学oop原理。我想知道这是否是Cardellis定义的正确例子。请开导我该示例使用cfml基于脚本的语法
<cfscript>
Parent = createobject("component","webapp.model.Parent").init();
Child = createobject("component","webapp.model.Child").init();
GrandChild = createobject("component","webapp.m
标签: Oop
encapsulationooad
今天我读了一本书,作者写道,在设计良好的类中,访问属性的唯一方法是通过该类方法之一。这是一个被广泛接受的想法吗?为什么封装属性如此重要?不这样做会有什么后果?我之前在某个地方读到过这样可以提高安全性之类的东西。PHP或Java中的任何例子都会非常有用。关于如何实现“良好的OOD”的观点不计其数,而且经验丰富的程序员和设计师往往在设计选择和理念上存在分歧。如果你询问不同语言背景和范式的人,这可能是一个火焰战争的开端
是的,理论和实践是一样的,所以语言的选择不应该对高级设计有太大的影响。但在实践中,
标签: Oop
implementationscripting-language
实例变量是这样的:每个对象都有一个哈希表来存储其实例变量。然而,HashTable必须从Object派生,因此每个HashTable都有一个HashTable来存储其实例变量。每个哈希表的每个哈希表都有一个哈希表,以此类推
我的问题是,这种类型的系统可以以面向对象的方式在底层C++代码中实现吗?如果不采取预防措施,程序将进入一个无限循环,仅仅实例化一个对象就会导致堆栈溢出,因为它将实例化一个哈希表,该哈希表将调用对象的父构造函数,该构造函数将实例化一个哈希表
对于这个设计缺陷,是否有任何可行的解
有什么理由支持继承而不是混合
给出以下psuedo代码示例:
class Employee
class FullTimeEmployee inherits Employee
class PartTimeEmployee inherits Employee
// versus
class Employee
class WorksPartTime
class WorksFullTime
class FullTimeEmployee includes Employee, WorksFul
我正在尝试为我们的企业应用程序创建一组模型。它从未将它们与数据库紧密地联系在一起。在这一点上,我试图简单地回答“Is-A”或“Has-A”的问题。我是基于DB结构的,但我不想,必然地,被束缚在这上面
首先,我有一个非常明显的人物模型,带有典型的“Has-A”电话和地址。几乎所有的东西都是从那个人的模型出发的,是一个“Has-a”
不过,我们有议员。在我们的DB/当前系统中,成员是具有注册的人。具体而言,是指某一类型的已取消注册的注册(按日期)
一方面,我觉得该成员将继承人作为“是-是”关系。然而
我感兴趣的是一般方法,而不是特定的库或框架
如果可能的话,我会尽量避免使用意大利面条式的条件句。也许我对这些应用的想法完全错误,但我似乎在网上找不到任何有用的东西
当有多种状态相互影响时,问题就会出现。下面是一个例子:
想象一个具有以下能力的人:
步行。
跑
坐
我用Walk.execute、Run.execute和Sit.execute创建了一个命令模式。这些命令是由用户输入或其他方式触发的。当然,这一点的好处在于,如果运行需要调试或修改,那么很容易知道在代码库中查找的位置
现在我被要求添加一
对于将OOP应用于Corona,我有点心神不宁。我已经创建了一个类,它是一个时间选择器,我希望在我的应用程序中重复使用多次。我试着将它的两个实例放在同一个故事板场景中,但第一个选择器上的按钮控制数据并在第二个选择器上显示。所以他们共享数据、函数等。我想知道是否有人能告诉我哪里出了问题?这是我的timepicker类(timepicker2.lua):
我有一种感觉,我需要将这些功能与obj联系起来,但我正在为如何做到这一点而苦苦挣扎。希望有人能给我指出正确的方向?
非常感谢
编辑
迄今为止修改(
我正在学习英语
在上面的链接(Java示例)中,我注意到构建器提供了构造多个组件的接口。在调用它们的同时,我们还调用getProduct()
我不明白的是,为什么导演需要一个接一个地调用所有这些组件构造方法,并最终得到结果
/** "Director" */
class Waiter {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) { pizzaBuilde
给定rails(4.0)中的两个关联模型
这样,当用户成功更新时,关联的订阅将重新保存,从而调用其更新过滤器(即保存前,更新前,保存后,更新后)
有没有一种优雅的方法可以做到这一点?如果没有,最接近清洁的方法是什么
谢谢大家! 试试这个
has_one :subscription, :dependent => destroy, :autosave => true
有关更多详细信息,请参阅文档
has_one :subscription, :dependent
我在制作一种将钱从一个物体转移到另一个物体的方法时遇到了一些麻烦
这主要是为了创建一个类来模拟执行以下操作的tester类
public class BankAccountTest
{
public void main()
{
// Create an account with an opening balance of 5000 AED for Mr. Said
BankAccount acc1 = new BankAccount("Said"
创建自己的睡眠功能:
IUfMessung = interface
['{6C258E04-BCC9-4349-912B-57A38F103570}']
function MacheMessung(Ifl,Ufl: double): double;
end;
TUFMessungMitHalten = class(TInterfacedObject,IUfMessung)
private
SWZeitHalten: double;
public
constr
在面向对象编程中,CRUD和用例之间有什么区别?
我正在制作许多对象,我想知道哪一个使用起来更快。
哪一个更有效,哪一个更容易使用?CRUD本身并不是任何用例。
通常,一个用例将不执行任何、一个或多个CRUD操作,以便能够成功地获得预期的结果。CRUD是Create-Read-Update-Delete的缩写
用例,就像它所写的一样,是您使用系统的用例
所以CRUD可能是用例的一部分
例如,图书馆管理系统可能有一些用例,如创建用户、删除用户、更新用户信息、查询用户信息、借阅图书、归还图书、订阅、
我有一个关于科特林的问题。我想强制转换一个通过解析JSON生成的对象。应将其转换为的类型将动态确定。这导致了我在下面代码的注释中解释的问题:
// interface for objects that are received as json
interface Bundle
// many data classes implementing the Bundle interface
// e.g.
data class DailyPostBundle(/* ... */) : Bundle
我有一个用Fortran编写的链表类型。除了演示链表之外,它是非常无用的。我希望从中派生出一种类型,以便更好地使用。我的基类是link,派生类是有用的链接。链接除了创建一个新链接并接收指向该链接的指针外,没有什么作用。我的意图是,有用的链接将创建一个新的有用的链接,并将一些有用的数据传递给它的新创建。而且,正如你可能猜到的,做一些我没有时间或空间讨论的其他事情。我编写代码的第一步是:
module links
type link
type(link), poi
我有一个configuration registry类,它包含一组具有特定接口的配置类。这些类还可以有一个可选接口。因此,这些类在伪代码中可能如下所示:
class ConfigurationRegistry {
private ModuleConfiguration[];
public function ConfigurationRegistry(ModuleConfiguration[] collection) {
this.collection = c
上一页 1 2 ...
5 6 7 8 9 10 11 ...
下一页 最后一页 共 125 页