Hay dos formas de combinar el paradigma funcional y el orientado a objetos. Hasta cierto punto, son independientes y puede escribir código inmutable (funcional) que está estructurado usando tipos (escritos como objetos F #). Un F # ejemplo de Client
tipo escrito como este sería:
// Functional 'Client' class
type Client(name, income) =
// Memebers are immutable
member x.Name = name
member x.Income = income
// Returns a new instance
member x.WithIncome(ninc) =
new Client(name, ninc)
member x.Report() =
printfn "%s %d" name income
Tenga en cuenta que la WithIncome
método (que "los cambios" los ingresos del cliente) en realidad no hacer ninguna modificación - que sigue el estilo funcional y crea un nuevo cliente actualizado y lo devuelve como resultado.
Por otro lado, en F # también puede escribir código orientado a objetos que tiene propiedades públicas mutables, pero utiliza una estructura de datos inmutables bajo la cubierta. Esto puede ser útil cuando se tiene algo de código funcional agradable y desea exponer a los programadores C# de forma tradicional (imperativo/orientado a objetos):
type ClientList() =
// The list itself is immutable, but the private
// field of the ClientList type can change
let mutable clients = []
// Imperative object-oriented method
member x.Add(name, income) =
clients <- (new Client(name, income))::clients
// Purely functional - filtering of clients
member x.Filter f =
clients |> List.filter f
(El ejemplo se toma a partir del código fuente de Chapter 9 de mi libro. Hay más ejemplos de códigos inmutables orientados a objetos, por ejemplo, en simulación paralela en el Capítulo 14).
¿No es el hecho de que F # puede * consumir * y * producir * tipos de clase que otros lenguajes MSIL pueden usar (por ejemplo, C#, VB.NET y J #) para argumentar sobre el aspecto de "objeto"? ¿O hay una investigación más específica al acecho? –
¿Qué es lo que realmente quieres? Suena como si estuvieras pidiendo un ejemplo de 10,000 líneas del mundo real (tal vez respaldado por un libro blanco de un estudio de caso); si no, ¿puedes aclarar lo que quieres ver? – Brian
Hola, solo quería ver las ventajas de la programación funcional de objetos sobre solo OO o solo la programación funcional. He estado usando F # y C# ambos en un proyecto pero F # principalmente para escribir métodos de biblioteca consumidos por C#. Estamos buscando ejemplos de cómo la programación híbrida puede ayudarnos. A partir de ahora, solo utilizamos la coincidencia de patrones y la comprensión de listas (solo dentro de los métodos). Claramente debería haber algo más que nos falta :) –