希望有人可以通过一个例子或者一些建议的阅读来解释这个问题.我想知道在类层次结构等效之后建模表的最佳设计方法是什么.这可以通过一个例子来描述:
abstract class Card{
private $_name = '';
private $_text = '';
}
class MtgCard extends Card{
private $_manaCost = '';
private $_power = 0;
private $_toughness = 0;
private $_loyalty = 0;
}
class PokemonCard extends Card{
private $_energyType = '';
private $_hp = 0;
private $_retreatCost = 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,在建模表以与此类层次结构同步时,我已经使用了非常类似的东西:
TABLE Card
id INT, AUTO_INCREMENT, PK
name VARCHAR(255)
text TEXT
TABLE MtgCard
id INT, AUTO_INCREMENT, PK
card_id INT, FK(card.id)
manacost VARCHAR(32)
power INT
toughness INT
loyalty …Run Code Online (Sandbox Code Playgroud) 你如何解释类层次结构.
我认为我的谷歌权力已经下降,因为当我搜索"类层次结构"作为术语时,我得到了一些关于类如何组织以及它们之间的继承关系的例子.是关于类层次结构的吗?你如何向C开发人员解释类层次结构?
还有什么是类层次结构和对象层次结构之间的区别?
实际上,我应该在星期六向我的办公室同事发表演讲并遇到如此多的理论主题:(
任何帮助,将不胜感激.
非常感谢
在objective-C中,我希望有一个子类调用或调用父类的方法.因为在父级中已经分配了子级,并且子级执行了调用父方法的操作.像这样:
//in the parent class
childObject *newChild = [[childClass alloc] init];
[newChild doStuff];
//in the child class
-(void)doStuff {
if (something happened) {
[parent respond];
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?(如果你能彻底解释我会很感激)
以下Scala类:
class Foo[+T <: Bar] extends FooBase ...
Run Code Online (Sandbox Code Playgroud)
有效地定义了一个以Foo [Bar]为根的类型层次结构 - 即任何有效的Foo [X]都可以赋值给Foo [Bar]值或变量:
val v1: Foo[Bar] = new Foo[SubBar1]();
val v2: Foo[Bar] = new Foo[SubBar2]();
Run Code Online (Sandbox Code Playgroud)
FooBase更进一步,也可能暗示不是Foo的对象 - 以下显示了问题:
class Trouble extends FooBase ...
val iOnlyWantFooHere: FooBase = new Trouble();
Run Code Online (Sandbox Code Playgroud)
...而且FooBase也不知道类型T,所以它的成员不能指定它,我必须在Foo中覆盖这些定义来专门化它们:
class FooBase {
def ohNoIDontKnowTheType: Bar;
}
class Foo[+T <: Bar] extends FooBase {
override def ohNoIDontKnowTheType: T = ...;
}
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以解决这个问题,但重点应该是明确的.
最后,我的实际问题是以下层次结构的根源:
class Foo[+T <: Foo[T]] extends FooBase ...
Run Code Online (Sandbox Code Playgroud)
再说一遍,不要告诉我FooBase,因为事实并非如此.是的,我可以在专门用于此目的之间插入另一个类,但这仍然不是如上所述的真实答案.
Scala不喜欢just Foo(没有type参数),并且它不是Foo[_]因为然后访问返回类型参数类型的值的方法实际上Any不是Foo …
我是PHP和Codeigniter的新手,我正在声明一个我想在模型类中访问的类级变量.我收到一个错误,即未定义变量.这是我的代码:
class Country_model extends CI_Model{
protected $table = 'COUNTRY';
function __construct()
{ // Call the Model constructor
parent::__construct();
}
function retriveAll(){
$q = $this->db->from($table)
->order_by('ID','ASC')
->get();
if ($q->num_rows()>0){
foreach ($q->result() as $row) {
$data[] = $row;
}
return $data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经声明$table并正在访问retriveAll函数.请帮我.
不要用文字描述问题,而是让我向你展示一个Scala Interpreter会话,它展示了我想要做的事情.
scala> class A extends Parent{
| def name = "Alex"
| }
defined class A
scala> class B extends Parent{
| def name = "Bernardo"
| }
defined class B
scala> def addFamilyName[T <: Parent](fn:String, c:T{def name():String}) = c.name + " " + fn
addFamilyName: [T <: Parent](fn: String, c: T{def name(): String})java.lang.String
scala> addFamilyName( "Martins", new A())
<console>:11: error: type mismatch;
found : A
required: ?{def name(): String}
addFamilyName( "Martins", new A())
^
Run Code Online (Sandbox Code Playgroud)
所以基本上我想在参数中定义一个类型,它既是某个类型的子类,也包含一个带签名的方法 def name():String. …
在java中如果你有一个对象需要一个泛型来扩展一个特定的类,但你想用它的扩展来实现它有没有办法让java知道你实际上并没有违反自己的规则?下面的示例代码假设没有意义.
public interface WantedInterface extends StaticInterface<WantedObject>
public class WantedObject extends OlderObject
public class OlderObject extends UsefulObject
public interface StaticInterface<T extends UsefulObject>
Run Code Online (Sandbox Code Playgroud)
所以我的问题基本上是,有没有办法让我告诉我的StaticInterface我的WantedObject实际上扩展了我的UsefulObject,即使它不是直接的?我真的不希望不必将我的WantedObject重写为UsefulObject的纯扩展,因为OlderObject包含许多有用的代码,我正在写一个数据库,我正在使用的序列需要了解当前状态OlderObject.我在写这篇文章时意识到我可以让WantedInterface直接扩展OlderObject的接口,但我想知道是否有办法避免这种情况.
编辑:好的,在一个非常奇怪的事情扭曲,我能够通过将WantedObject的扩展名更改为UsefulObject来解决问题,然后将其更改为原样.也许问题只是一些临时的IDE事情?我正在使用eclipse,它有偶然的问题吗?
让我们看看以下类结构:
abstract class Base {
public abstract void DoSth();
}
class Derived1 : Base {
public override void DoSth() {
}
}
Run Code Online (Sandbox Code Playgroud)
这些是某些层次结构的基类.现在,让我们假设,我们要提供从另一个类派生Derived1(让我们叫它Derived2),它不应该使用的默认实现DoSth提供Default1.例如,Derived1涵盖了98%的案例,但在剩余的2%中,此解决方案是不可接受或危险的.
最好的解决方案是通知派生出来的人Derived2,他应该在编译期间实现DoSth.怎么做?
Greg Pfeil的Class Hierarchy图提供了Common Lisp类型系统的全面图片.但我正在努力更好地理解层次结构顶部的类关系.举个简单的例子,让我们(defstruct person name age),然后(defparameter *p1* (make-person :name "Yosh" :age 19).现在
(typep *p1* 'person)
T
(typep *p1* 'structure)
T
(typep *p1* 'structure-object)
T
(typep *p1* 'atom)
T
(typep *p1* t)
T
Run Code Online (Sandbox Code Playgroud)
该Hyperspec说,对于优先级表structure-object仅是自身t.是atom和structure不是层次结构中的类型?
什么是直接的亚型t?更一般地说,如何检索任何给定类型的所有直接子类型或超类型(没有反复试验subtypep)?或者,有没有办法迭代所有类型的列表?MOP是否提供了所有子/超类的功能?
通过类比集合理论,似乎所有Common Lisp类型/类在理论上可以细分为两个子类t; 即,standard-object(对应于元件使用类似数字3,字符串"abc",结构s1中,方法M1,等情况下),和standard-class(对应于组中包含的类实例standard-object,类number,类structure-object等).如果这不是实际的细分t,那么原因是否与实际实施有关; 例如,避免层次结构中的递归类关系?
非常感谢 Paulw11 帮助我解决了这个问题。我在这里添加了完整的代码以便于重用:
班级:
import UIKit
import MessageUI
struct Feedback {
let recipients: [String]
let subject: String
let body: String
let footer: String
}
class FeedbackManager: NSObject, MFMailComposeViewControllerDelegate {
private var feedback: Feedback
private var completion: ((Result<MFMailComposeResult,Error>)->Void)?
override init() {
fatalError("Use FeedbackManager(feedback:)")
}
init?(feedback: Feedback) {
guard MFMailComposeViewController.canSendMail() else {
return nil
}
self.feedback = feedback
}
func send(on viewController: UIViewController, completion:(@escaping(Result<MFMailComposeResult,Error>)->Void)) {
let mailVC = MFMailComposeViewController()
self.completion = completion
mailVC.mailComposeDelegate = self
mailVC.setToRecipients(feedback.recipients)
mailVC.setSubject(feedback.subject)
mailVC.setMessageBody("<p>\(feedback.body)<br><br><br><br><br>\(feedback.footer)</p>", isHTML: true)
viewController.present(mailVC, …Run Code Online (Sandbox Code Playgroud) class-hierarchy messageui ios swift mfmailcomposeviewcontroller
class-hierarchy ×10
generics ×2
methods ×2
scala ×2
types ×2
abstract ×1
alloc ×1
c# ×1
class ×1
clos ×1
codeigniter ×1
common-lisp ×1
covariant ×1
ios ×1
java ×1
messageui ×1
mfmailcomposeviewcontroller ×1
object ×1
objective-c ×1
oop ×1
orm ×1
parent-child ×1
php ×1
root ×1
swift ×1
virtual ×1